예제 #1
0
        static void TestSequenceOrder(YieldingDispatcher dispatcher, ISubject <int> sub, IObservable <int> obs)
        {
            IList <int> result = null;

            obs.SelectMany(i => Observable.FromAsync(() => dispatcher.InvokeAsync(
                                                         () =>
            {
                Thread.Sleep(100);
                return(i);
            })))
            .Buffer(2)
            .Subscribe(
                l =>
            {
                result = l;
            });

            sub.OnNext(1);
            dispatcher.FlushNoneBlocking();             // This is the key here, we start processing item '1' before we add item '2'
            sub.OnNext(2);

            while (result == null)
            {
                dispatcher.Flush();
                Thread.Sleep(1);
            }

            Assert.True(result.Count == 2, "Unexpected number of items in observable sequence. Was expecting 2");
            Assert.True(result[0] == 1, "Unexpected observable sequence order. Was expecting 1");
            Assert.True(result[1] == 2, "Unexpected observable sequence order. Was expecting 2");
        }
예제 #2
0
        public static void TestYieldNormalSequence()
        {
            var ctSource   = new CancellationTokenSource();
            var dispatcher = new YieldingDispatcher(ctSource.Token);

            var sub = new Subject <int>();
            var obs = sub.ObserveOn(dispatcher);

            TestSequenceOrder(dispatcher, sub, obs);

            ctSource.Cancel();
        }