Exemplo n.º 1
0
        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();
        }