コード例 #1
0
        private static IObservable <TResult> ToObservableResult <TResult>(this AsyncSubject <TResult> subject, IScheduler scheduler)
        {
            if (scheduler != null)
            {
                return(subject.ObserveOn(scheduler));
            }

            return(subject.AsObservable());
        }
コード例 #2
0
 public void OnCompleted(Action continuation)
 {
     if (_subject.IsCompleted)
     {
         continuation();
     }
     else
     {
         _subject.ObserveOn(Scheduler.CurrentThread).First().Subscribe(_ => continuation());
     }
 }
コード例 #3
0
ファイル: AsyncUtil.cs プロジェクト: swipswaps/VoloAirsport
        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));
        }