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); }
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"); } }
protected void AsyncBarrierCompletesImmediatelyForFirst(AbstractAsyncBarrier barrier) { var waitingTask = barrier.WaitAsync(CancellationToken); waitingTask.Status.Should().Be(TaskStatus.RanToCompletion); }