code: public static <R> Observable<R> startCallable(final Callable<? extends R> func, final Scheduler scheduler) {
          final AsyncSubject<R> subject = AsyncSubject.create();
          final Worker inner = scheduler.createWorker();
          inner.schedule(new Action0() {
              @Override
              public void call() {
                  R result;
                  try {
                      result = func.call();
                  } catch (Throwable t) {
                      subject.onError(t);
                      return;
                  } finally {
                      inner.unsubscribe();
                  }
                  subject.onNext(result);
                  subject.onCompleted();
              }
          });
          return subject;
      }
docs: Invokes the specified callable asynchronously and returns an Observable that emits the result.
  <p>
  Note: The function is called immediately and once, not whenever an observer subscribes to the resulting
  Observable. Multiple subscriptions to this Observable observe the same return value.
  <p>
  <img width="640" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/start.png" alt="">
  
  @param <R> the result value type
  @param func function to run asynchronously
  @return an Observable that emits the function's result value, or notifies observers of an exception
  @see <a href="https://github.com/ReactiveX/RxJava/wiki/Async-Operators#wiki-start">RxJava Wiki: start()</a>
  @see <a href="http://msdn.microsoft.com/en-us/library/hh229036.aspx">MSDN: Observable.Start</a>