private static IObservable <TResult> ToObservableResult <TResult>(this AsyncSubject <TResult> subject, IScheduler scheduler) { if (scheduler != null) { return(subject.ObserveOn(scheduler)); } return(subject.AsObservable()); }
public void OnCompleted(Action continuation) { if (_subject.IsCompleted) { continuation(); } else { _subject.ObserveOn(Scheduler.CurrentThread).First().Subscribe(_ => continuation()); } }
public static IObservable <T> DoWorkAsync <T>(Func <T> work, IScheduler scheduler) { var asyncSubject = new AsyncSubject <T>(); Task.Factory.StartNew(() => { try { T result = work.Invoke(); asyncSubject.OnNext(result); asyncSubject.OnCompleted(); } catch (Exception e) { asyncSubject.OnError(e); } }); return(asyncSubject.ObserveOn(scheduler) .SubscribeOn(scheduler)); }