public static IObservable <T> Busy <T>(this IObservable <T> observable, ReactiveViewModelBase viewModel, IScheduler scheduler) { var stream = Observable.Create <T>(obs => { viewModel.ObservingCount++; var disposables = new CompositeDisposable { observable .SubscribeOn(scheduler) .ObserveOn(viewModel.UiDispatcherScheduler) .Subscribe(e => obs.OnNext(e), ex => obs.OnError(ex), () => obs.OnCompleted()), Disposable.Create(() => { viewModel.ObservingCount--; }) }; return(disposables); }); return(stream.SubscribeOn(viewModel.UiDispatcherScheduler)); }
public static IObservable <T> Busy <T>(this IObservable <T> observable, ReactiveViewModelBase viewModel) => Busy(observable, viewModel, NewThreadScheduler.Default);