code: @CheckReturnValue
      @BackpressureSupport(BackpressureKind.ERROR)
      @SchedulerSupport(SchedulerSupport.CUSTOM)
      public static Flowable<Long> timer(long delay, TimeUnit unit, Scheduler scheduler) {
          ObjectHelper.requireNonNull(unit, "unit is null");
          ObjectHelper.requireNonNull(scheduler, "scheduler is null");
  
          return RxJavaPlugins.onAssembly(new FlowableTimer(Math.max(0L, delay), unit, scheduler));
      }
docs: Returns a Flowable that emits {@code 0L} after a specified delay, on a specified Scheduler, and then
  completes.
  <p>
  <img width="640" height="200" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/timer.s.png" alt="">
  <dl>
  <dt><b>Backpressure:</b></dt>
  <dd>This operator does not support backpressure as it uses time. If the downstream needs a slower rate
  it should slow the timer or use something like {@link #onBackpressureDrop}.</dd>
  <dt><b>Scheduler:</b></dt>
  <dd>You specify which {@link Scheduler} this operator will use.</dd>
  </dl>
  
  @param delay
  the initial delay before emitting a single 0L
  @param unit
  time units to use for {@code delay}
  @param scheduler
  the {@link Scheduler} to use for scheduling the item
  @return a Flowable that emits {@code 0L} after a specified delay, on a specified Scheduler, and then
  completes
  @see <a href="http://reactivex.io/documentation/operators/timer.html">ReactiveX operators documentation: Timer</a>