Exemplo n.º 1
0
        public void AsyncBarrierOf2CompletesWhenSecondArrives(AbstractAsyncBarrier barrier)
        {
            var waitingTask1 = barrier.WaitAsync(CancellationToken);

            waitingTask1.IsCompleted.Should().BeFalse();
            var waitingTask2 = barrier.WaitAsync(CancellationToken);

            waitingTask1.Status.Should().Be(TaskStatus.RanToCompletion);
            waitingTask2.Status.Should().Be(TaskStatus.RanToCompletion);
            waitingTask1.Should().BeSameAs(waitingTask2);
        }
Exemplo n.º 2
0
 public void CancellationOfWaitForAsyncBarrierPropogates(AbstractAsyncBarrier barrier)
 {
     using (var cts = CancellationTokenSource.CreateLinkedTokenSource(CancellationToken))
     {
         var w = new[]
         {
             barrier.WaitAsync(CancellationToken),
             barrier.WaitAsync(cts.Token),
             barrier.WaitAsync(CancellationToken),
             barrier.WaitAsync(cts.Token)
         };
         cts.Cancel();
         w.Should().OnlyContain(x => x.IsCanceled,
                                "Cancellation should be synchroneously distributed to all waiters");
     }
 }
Exemplo n.º 3
0
        protected void AsyncBarrierCompletesImmediatelyForFirst(AbstractAsyncBarrier barrier)
        {
            var waitingTask = barrier.WaitAsync(CancellationToken);

            waitingTask.Status.Should().Be(TaskStatus.RanToCompletion);
        }