@Override
    public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
        Map<String, String> mdcContextMap = getMdcContextMap();
        return super.schedule(ContextPropagator.decorateRunnable(contextPropagators, () -> {
                try {
                    setMDCContext(mdcContextMap);
                    command.run();
                } finally {
                    MDC.clear();
                }
            }), delay, unit);
    }
@Test
    public void testScheduleCallableWithDelayPropagatesContext() {
        TestThreadLocalContextHolder.put("ValueShouldCrossThreadBoundary");
        final ScheduledFuture<?> schedule = schedulerService.schedule(() -> TestThreadLocalContextHolder.get().orElse(null), 100, TimeUnit.MILLISECONDS);
        waitAtMost(200, TimeUnit.MILLISECONDS).until(matches(() ->
            assertThat(schedule.get()).isEqualTo("ValueShouldCrossThreadBoundary")));
    }