docs: public static <T> java.util.concurrent.ScheduledFuture<T> delay(final Supplier<T> function,
          final int delayMilliseconds) {
          final java.util.concurrent.ScheduledExecutorService scheduler =
              java.util.concurrent.Executors.newSingleThreadScheduledExecutor();
          final java.util.concurrent.ScheduledFuture<T> future = scheduler.schedule(
              new java.util.concurrent.Callable<T>() {
                  public T call() {
                      return function.get();
                  }
              }, delayMilliseconds, java.util.concurrent.TimeUnit.MILLISECONDS);
          scheduler.shutdown();
          return future;
      }