code: @CheckReturnValue
      @BackpressureSupport(BackpressureKind.FULL)
      @SchedulerSupport(SchedulerSupport.CUSTOM)
      public final Flowable<T> delay(long delay, TimeUnit unit, Scheduler scheduler, boolean delayError) {
          ObjectHelper.requireNonNull(unit, "unit is null");
          ObjectHelper.requireNonNull(scheduler, "scheduler is null");
  
          return RxJavaPlugins.onAssembly(new FlowableDelay<T>(this, Math.max(0L, delay), unit, scheduler, delayError));
      }
docs: Returns a Flowable that emits the items emitted by the source Publisher shifted forward in time by a
  specified delay. If {@code delayError} is true, error notifications will also be delayed.
  <p>
  <img width="640" height="310" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/delay.s.png" alt="">
  <dl>
  <dt><b>Backpressure:</b></dt>
  <dd>The operator doesn't interfere with the backpressure behavior which is determined by the source {@code Publisher}.</dd>
  <dt><b>Scheduler:</b></dt>
  <dd>You specify which {@link Scheduler} this operator will use.</dd>
  </dl>
  
  @param delay
  the delay to shift the source by
  @param unit
  the time unit of {@code delay}
  @param scheduler
  the {@link Scheduler} to use for delaying
  @param delayError
  if true, the upstream exception is signaled with the given delay, after all preceding normal elements,
  if false, the upstream exception is signaled immediately
  @return the source Publisher shifted in time by the specified delay
  @see <a href="http://reactivex.io/documentation/operators/delay.html">ReactiveX operators documentation: Delay</a>