public void WhenCollectionIsCompleted_WaitedConsumersShouldBeCancelled() { using (var sut = new SimpleBlockingCollection <int>()) { var consumer1 = Task.Run(() => sut.Take()); var consumer2 = Task.Run(() => sut.Take()); ConcurrentAssert.EnsureThatTaskIsNeverCompleted(Task.WhenAny(consumer1, consumer2)); sut.CompleteAdding(); Assert.ThrowsExceptionAsync <OperationCanceledException>(() => consumer1); Assert.ThrowsExceptionAsync <OperationCanceledException>(() => consumer2); } }
public void WhenThereIsWaitedConsumer_ItShouldWakeupAfterAddingNewElement() { using (var sut = new SimpleBlockingCollection <int>()) { var task = Task.Run(() => { return(sut.Take()); }); ConcurrentAssert.EnsureThatTaskIsNeverCompleted(task); sut.Add(10); Assert.AreEqual(task.Result, 10); } }
public void WhenCollectionIsCompleted_WaitedProducersShouldBeCancelled() { using (var sut = new SimpleBlockingCollection <int>(1)) { sut.Add(10); var producer1 = Task.Run(() => sut.Add(20)); var producer2 = Task.Run(() => sut.Add(30)); ConcurrentAssert.EnsureThatTaskIsNeverCompleted(Task.WhenAny(producer1, producer2)); sut.CompleteAdding(); Assert.ThrowsExceptionAsync <OperationCanceledException>(() => producer1); Assert.ThrowsExceptionAsync <OperationCanceledException>(() => producer2); } }