Exemplo n.º 1
0
        public async Task Async_CancelDuringExecution_Raise()
        {
            var sample = new Sample();
            var cts    = new CancellationTokenSource();

            using (var unsubscribers = new UnsubscriberBag()) {
                sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers);
                sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers);

                sample.TestEvent.Subscribe(async(x, ct) =>
                {
                    await Task.Delay(10, ct);
                    cts.Cancel();
                }).AddTo(unsubscribers);

                sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers);
                sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers);

                Assert.Equal(5, sample.SubscibedCount);
                await Assert.ThrowsAsync <OperationCanceledException>(async() =>
                {
                    await sample.ParallelRaiseTest(cts.Token);
                });
            }
            Assert.Equal(0, sample.SubscibedCount);
            return;
Exemplo n.º 2
0
        public void RaiseTest()
        {
            var sample = new Sample();
            var flag   = false;

            Assert.Equal(0, sample.SubscibedCount);
            using (var bag = new UnsubscriberBag()) {
                sample.TestEvent.Subscribe(x => flag = true).AddTo(bag);
                Assert.Equal(1, sample.SubscibedCount);
                sample.RaiseTest();
                Assert.True(flag);
            }
            Assert.Equal(0, sample.SubscibedCount);
        }
Exemplo n.º 3
0
        public async Task Sync_NeverCompleted_Raise(int delegateCount)
        {
            var sample = new Sample();

            using (var unsubscribers = new UnsubscriberBag()) {
                for (int i = 0; i < delegateCount; i++)
                {
                    sample.TestEvent.Subscribe((x, ct) => UniTask.Never(ct)).AddTo(unsubscribers);
                }
                Assert.Equal(delegateCount, sample.SubscibedCount);
                await Assert.ThrowsAsync <OperationCanceledException>(async() =>
                {
                    await sample.ParallelRaiseTest(new CancellationToken(true));
                });
            }
            Assert.Equal(0, sample.SubscibedCount);
        }
Exemplo n.º 4
0
        public void MultiSubscribe(int subscribeCount)
        {
            var sample = new Sample();
            var state  = 0;
            var called = new bool[subscribeCount];

            Assert.Equal(0, sample.SubscibedCount);
            using (var bag = new UnsubscriberBag()) {
                for (int i = 0; i < subscribeCount; i++)
                {
                    var num = i;
                    sample.TestEvent.Subscribe(x =>
                    {
                        called[num] = true;
                        Assert.Equal(num, state);
                        state++;
                    }).AddTo(bag);
                }
                Assert.Equal(subscribeCount, sample.SubscibedCount);
                sample.RaiseTest();
                Assert.True(called.All(x => x));
            }
            Assert.Equal(0, sample.SubscibedCount);
        }
Exemplo n.º 5
0
        public async Task Async_Completed_Raise(int delegateCount, bool alreadyCanceled)
        {
            var sample = new Sample();

            using (var unsubscribers = new UnsubscriberBag()) {
                for (int i = 0; i < delegateCount; i++)
                {
                    sample.TestEvent.Subscribe(async(x, ct) => await UniTask.CompletedTask).AddTo(unsubscribers);
                }
                Assert.Equal(delegateCount, sample.SubscibedCount);
                if (alreadyCanceled)
                {
                    await Assert.ThrowsAsync <OperationCanceledException>(async() =>
                    {
                        await sample.ParallelRaiseTest(new CancellationToken(true));
                    });
                }
                else
                {
                    await sample.ParallelRaiseTest(CancellationToken.None);
                }
            }
            Assert.Equal(0, sample.SubscibedCount);
        }