示例#1
0
        public async Task TwoObjects_OneCancelled()
        {
            var obj1 = new ObjectWithEvent();
            var t1   = _eas.Create(obj1);

            var obj2 = new ObjectWithEvent();
            var cts  = new CancellationTokenSource();
            var t2   = _eas.Create(obj2, cts.Token);

            t1.IsCompleted.Should().BeFalse();
            t2.IsCompleted.Should().BeFalse();

            Task.Run(() => obj1.Raise(5)).DoNotWait();

            await Task.WhenAny(t1, t2);

            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeFalse();
            t1.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);

            Task.Run(() => cts.Cancel()).DoNotWait();
            Func <Task> f = async() => await t2;

            f.ShouldThrow <OperationCanceledException>();

            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeTrue();
        }
        public async Task TwoObjects_OneCancelled() {
            var obj1 = new ObjectWithEvent();
            var t1 = _eas.Create(obj1);

            var obj2 = new ObjectWithEvent();
            var cts = new CancellationTokenSource();
            var t2 = _eas.Create(obj2, cts.Token);

            t1.IsCompleted.Should().BeFalse();
            t2.IsCompleted.Should().BeFalse();

            Task.Run(() => obj1.Raise(5)).DoNotWait();

            await Task.WhenAny(t1, t2);
            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeFalse();
            t1.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(5);

            Task.Run(() => cts.Cancel()).DoNotWait();
            Func<Task> f = async () => await t2;
            f.ShouldThrow<OperationCanceledException>();

            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeTrue();
        }
示例#3
0
        public async Task TwoObjects()
        {
            var obj1 = new ObjectWithEvent();
            var obj2 = new ObjectWithEvent();
            var t1   = _eas.Create(obj1);
            var t2   = _eas.Create(obj2);

            t1.IsCompleted.Should().BeFalse();
            t2.IsCompleted.Should().BeFalse();

            Task.Run(() => obj1.Raise(5)).DoNotWait();

            await Task.WhenAny(t1, t2);

            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeFalse();
            t1.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);

            Task.Run(() => obj2.Raise(10)).DoNotWait();

            await t2;

            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeTrue();

            t2.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(10);
        }
        public async Task TwoObjects() {
            var obj1 = new ObjectWithEvent();
            var obj2 = new ObjectWithEvent();
            var t1 = _eas.Create(obj1);
            var t2 = _eas.Create(obj2);

            t1.IsCompleted.Should().BeFalse();
            t2.IsCompleted.Should().BeFalse();

            Task.Run(() => obj1.Raise(5)).DoNotWait();

            await Task.WhenAny(t1, t2);
            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeFalse();
            t1.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(5);
            
            Task.Run(() => obj2.Raise(10)).DoNotWait();

            await t2;
            t1.IsCompleted.Should().BeTrue();
            t2.IsCompleted.Should().BeTrue();

            t2.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(10);
        }
示例#5
0
        public async Task TwoEvents_NoUnsubscribe()
        {
            var obj = new ObjectWithEvent();
            var t   = _eas.Create(obj);

            t.IsCompleted.Should().BeFalse();
            Task.Run(() => obj.Raise(5)).DoNotWait();

            await t;

            t.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);

            Task.Run(() => obj.Raise(10)).DoNotWait();
            t.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);
        }
示例#6
0
        public async Task TwoEventsSequentalTasks()
        {
            var obj = new ObjectWithEvent();
            var t1  = _eas.Create(obj);

            t1.IsCompleted.Should().BeFalse();
            Task.Run(() => obj.Raise(5)).DoNotWait();

            await t1;

            t1.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);

            var t2 = _eas.Create(obj);

            Task.Run(() => obj.Raise(10)).DoNotWait();
            t1.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(5);
            t2.Result.Should().BeOfType <IntEventArgs>()
            .Which.Value.Should().Be(10);
        }
        public async Task TwoTasks() {
            var obj = new ObjectWithEvent();
            var t1 = _eas.Create(obj);
            var t2 = _eas.Create(obj);

            t1.IsCompleted.Should().BeFalse();
            t2.IsCompleted.Should().BeFalse();
            Task.Run(() => obj.Raise(5)).DoNotWait();

            await Task.WhenAll(t1, t2);
            t1.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(5);
            t2.Result.Should().Be(t1.Result);
        }
        public async Task TwoEvents() {
            var obj = new ObjectWithEvent();
            var t = _eas.Create(obj);

            t.IsCompleted.Should().BeFalse();
            Task.Run(() => obj.Raise(5)).DoNotWait();

            await t;
            t.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(5);

            Task.Run(() => obj.Raise(10)).DoNotWait();
            t.Result.Should().BeOfType<IntEventArgs>()
                .Which.Value.Should().Be(5);
        }