code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.CUSTOM)
      public static <T> Observable<T> fromFuture(Future<? extends T> future, long timeout, TimeUnit unit, Scheduler scheduler) {
          ObjectHelper.requireNonNull(scheduler, "scheduler is null");
          Observable<T> o = fromFuture(future, timeout, unit);
          return o.subscribeOn(scheduler);
      }
docs: Converts a {@link Future} into an ObservableSource, with a timeout on the Future.
  <p>
  <img width="640" height="287" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/fromFuture.timeout.scheduler.png" alt="">
  <p>
  You can convert any object that supports the {@link Future} interface into an ObservableSource that emits the
  return value of the {@link Future#get} method of that object, by passing the object into the {@code from}
  method.
  <p>
  Unlike 1.x, disposing the Observable won't cancel the future. If necessary, one can use composition to achieve the
  cancellation effect: {@code futureObservableSource.doOnDispose(() -> future.cancel(true));}.
  <p>
  <em>Important note:</em> This ObservableSource is blocking; you cannot dispose it.
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code fromFuture} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param future
  the source {@link Future}
  @param timeout
  the maximum time to wait before calling {@code get}
  @param unit
  the {@link TimeUnit} of the {@code timeout} argument
  @param scheduler
  the {@link Scheduler} to wait for the Future on. Use a Scheduler such as
  {@link Schedulers#io()} that can block and wait on the Future
  @param <T>
  the type of object that the {@link Future} returns, and also the type of item to be emitted by
  the resulting ObservableSource
  @return an Observable that emits the item from the source {@link Future}
  @see <a href="http://reactivex.io/documentation/operators/from.html">ReactiveX operators documentation: From</a>