docs: public final Object asyncInvokeNext(InvocationContext ctx, VisitableCommand command,
                                         Collection<? extends CompletionStage<?>> delays) {
        if (delays == null || delays.isEmpty()) {
           return invokeNext(ctx, command);
        } else if (delays.size() == 1) {
           return asyncInvokeNext(ctx, command, delays.iterator().next());
        } else {
           CompletableFuture<Void> delay = CompletableFuture.allOf(delays.stream()
                                                                         .map(CompletionStage::toCompletableFuture)
                                                                         .toArray(CompletableFuture[]::new));
           return asyncInvokeNext(ctx, command, delay);
        }
     }