Ejemplo n.º 1
0
        public async Task ToAsyncEnumerable_Observable6_Async()
        {
            using var stop = new ManualResetEvent(false);

            var xs = new MyObservable <int>(obs =>
            {
                var cts = new CancellationTokenSource();

                Task.Run(async() =>
                {
                    for (var i = 0; !cts.IsCancellationRequested; i++)
                    {
                        await Task.Yield();
                        obs.OnNext(i);
                    }

                    stop.Set();
                });

                return(new MyDisposable(cts.Cancel));
            }).ToAsyncEnumerable();

            var e = xs.GetAsyncEnumerator();

            for (var i = 0; i < 10_000; i++)
            {
                await HasNextAsync(e, i);
            }

            await e.DisposeAsync();

            stop.WaitOne();
        }
Ejemplo n.º 2
0
        public async Task ToAsyncEnumerable_Observable_Cancel_InFlight()
        {
            var xs = new MyObservable <int>(obs =>
            {
                var cts = new CancellationTokenSource();

                Task.Run(async() =>
                {
                    for (var i = 0; !cts.IsCancellationRequested; i++)
                    {
                        await Task.Delay(10);
                        obs.OnNext(i);
                    }
                });

                return(new MyDisposable(cts.Cancel));
            }).ToAsyncEnumerable();

            using var c = new CancellationTokenSource();

            await using var e = xs.GetAsyncEnumerator(c.Token);

            var task = e.MoveNextAsync();

            c.Cancel();

            await AssertThrowsAsync <TaskCanceledException>(task.AsTask());
        }
Ejemplo n.º 3
0
        public async Task ToAsyncEnumerable_Observable_Throw()
        {
            var ex         = new Exception("Bang!");
            var subscribed = false;

            var xs = new MyObservable <int>(obs =>
            {
                subscribed = true;

                obs.OnError(ex);

                return(new MyDisposable(() => { }));
            }).ToAsyncEnumerable();

            Assert.False(subscribed);

            var e = xs.GetAsyncEnumerator();

            // NB: Breaking change to align with lazy nature of async iterators.
            // Assert.True(subscribed);

            await AssertThrowsAsync(e.MoveNextAsync(), ex);
        }
Ejemplo n.º 4
0
        public async Task ToAsyncEnumerable_Observable_Return()
        {
            var subscribed = false;

            var xs = new MyObservable <int>(obs =>
            {
                subscribed = true;

                obs.OnNext(42);
                obs.OnCompleted();

                return(new MyDisposable(() => { }));
            }).ToAsyncEnumerable();

            Assert.False(subscribed);

            var e = xs.GetAsyncEnumerator();

            // NB: Breaking change to align with lazy nature of async iterators.
            // Assert.True(subscribed);

            await HasNextAsync(e, 42);
            await NoNextAsync(e);
        }