code: public ScheduledFuture<?> queueAfter(long delay, TimeUnit unit, Consumer<? super T> success, Consumer<? super Throwable> failure, ScheduledExecutorService executor)
      {
          Checks.notNull(executor, "Scheduler");
          Checks.notNull(unit, "TimeUnit");
          return executor.schedule((Runnable) new ContextRunnable(() -> queue(success, failure)), delay, unit);
      }
docs: Schedules a call to {@link #queue(java.util.function.Consumer, java.util.function.Consumer)}
  to be executed after the specified {@code delay}.
  <br>This is an <b>asynchronous</b> operation that will return a
  {@link java.util.concurrent.ScheduledFuture ScheduledFuture} representing the task.
  
  <p>The specified {@link java.util.concurrent.ScheduledExecutorService ScheduledExecutorService} is used for this operation.
  
  @param  delay
  The delay after which this computation should be executed, negative to execute immediately
  @param  unit
  The {@link java.util.concurrent.TimeUnit TimeUnit} to convert the specified {@code delay}
  @param  success
  The success {@link java.util.function.Consumer Consumer} that should be called
  once the {@link #queue(java.util.function.Consumer, java.util.function.Consumer)} operation completes successfully.
  @param  failure
  The failure {@link java.util.function.Consumer Consumer} that should be called
  in case of an error of the {@link #queue(java.util.function.Consumer, java.util.function.Consumer)} operation.
  @param  executor
  The Non-null {@link java.util.concurrent.ScheduledExecutorService ScheduledExecutorService} that should be used
  to schedule this operation
  
  @throws java.lang.IllegalArgumentException
  If the provided TimeUnit or ScheduledExecutorService is {@code null}
  
  @return {@link java.util.concurrent.ScheduledFuture ScheduledFuture}
  representing the delayed operation