public void shutdown(final Duration duration) {
        for (final TaskExecutor t: taskExecutors) {
            t.requestShutdown();
        }
        signalTaskExecutors();
        for (final TaskExecutor t: taskExecutors) {
            t.awaitShutdown(duration);
        }
    }
@Test
    public void shouldBlockOnAwait() throws InterruptedException {
        final AwaitingRunnable awaitingRunnable = new AwaitingRunnable();
        final Thread awaitingThread = new Thread(awaitingRunnable);
        awaitingThread.start();

        assertFalse(awaitingRunnable.awaitDone.await(100, TimeUnit.MILLISECONDS));

        awaitingRunnable.shutdown();
    }