public ThrottlingExampleViewModel() { Output = new ObservableCollection<string>(); FirstNames = new ReadOnlyCollection<string>(new List<string> {"Joe", "Bill", "Victor"}); LastNames = new ReadOnlyCollection<string>(new List<string> {"Smith", "White", "Black"}); var uiScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current); _requestParametersObservable = new Subject<Tuple<string, string>>(); _requestParametersObservable// .SubscribeOn(NewThreadScheduler.Default).Select(LoadData) //.Select(parameters => Observable.Start(() => LoadData(parameters), ThreadPoolScheduler.Instance)) .Select(parameters => Observable.FromAsync(token => LoadDataAsync(parameters, token))) .Switch() .ObserveOn(DispatcherScheduler.Current) .Subscribe(WriteData); }
private static void SynchronizationContextSchedulerExample() { Demo.DisplayHeader("SynchronizationContextScheduler - A bridge between Rx schedulers world and .NET SynchronizationContext"); SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); var syncContextScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current); var countdownEvent = new CountdownEvent(2); Console.WriteLine("Calling thread: {0}", Thread.CurrentThread.ManagedThreadId); syncContextScheduler.Schedule(Unit.Default, (s, _) => { Console.WriteLine("Action1 - Thread:{0}", Thread.CurrentThread.ManagedThreadId); countdownEvent.Signal(); }); syncContextScheduler.Schedule(Unit.Default, (s, _) => { Console.WriteLine("Action2 - Thread:{0}", Thread.CurrentThread.ManagedThreadId); countdownEvent.Signal(); }); countdownEvent.Wait(); }