public async Task PriorityProducerConsumer_Pending_Priority3() { var ppc = new PriorityProducerConsumer <int>(2); var values = new int[3]; var tcsConsumer = new TaskCompletionSource <bool>(); var tcsProducer = new TaskCompletionSource <bool>(); var consumerTask = Task.Run(async() => { for (var i = 0; i < 3; i++) { var task = ppc.ConsumeAsync(); tcsConsumer.TrySetResult(true); values[i] = await task; await tcsProducer.Task; } }); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask.Status); await tcsConsumer.Task; ppc.Produce(5, 1); ppc.Produce(6, 1); ppc.Produce(7); tcsProducer.SetResult(false); await consumerTask; Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask.Status); Assert.AreEqual(5, values[0]); Assert.AreEqual(7, values[1]); Assert.AreEqual(6, values[2]); }
public void PriorityProducerConsumer_NoPending_Priority2() { using (var ppc = new PriorityProducerConsumer <int>(2)) { ppc.Produce(6, 1); ppc.Produce(5); var consumerTask = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask.Status); Assert.AreEqual(5, consumerTask.Result); } }
public async Task PriorityProducerConsumer_Pending_Priority1() { var ppc = new PriorityProducerConsumer <int>(2); var consumerTask = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask.Status); ppc.Produce(5); ppc.Produce(6, 1); await consumerTask; Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask.Status); Assert.AreEqual(5, consumerTask.Result); }
private Task <IDisposable> Enqueue(int priority, bool isAwaitable, CancellationToken cancellationToken = default(CancellationToken)) { var item = new QueueItem(isAwaitable, cancellationToken); _ppc.Produce(item, priority); return(item.Task); }
public void PriorityProducerConsumer_NoPending_Duplicates3() { using var ppc = new PriorityProducerConsumer <int>(3, true); ppc.Produce(5, 1); ppc.Produce(6, 1); ppc.Produce(5, 1); var consumerTask1 = ppc.ConsumeAsync(); var consumerTask2 = ppc.ConsumeAsync(); var consumerTask3 = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask1.Status); Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask2.Status); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask3.Status); Assert.AreEqual(6, consumerTask1.Result); Assert.AreEqual(5, consumerTask2.Result); }
public async Task PriorityProducerConsumer_ExcludeDuplicates_HigherPriority() { using var ppc = new PriorityProducerConsumer <int>(maxPriority: 2, excludeDuplicates: true); ppc.Produce(value: 1, priority: 1); ppc.Produce(value: 2, priority: 1); ppc.Produce(value: 3, priority: 1); ppc.Produce(value: 1, priority: 0); ppc.Produce(value: 2, priority: 0); var data1 = await ppc.ConsumeAsync(CancellationToken.None); data1.Should().Be(1); var data2 = await ppc.ConsumeAsync(CancellationToken.None); data2.Should().Be(2); var data3 = await ppc.ConsumeAsync(CancellationToken.None); data3.Should().Be(3); }
public void PriorityProducerConsumer_MaxPriority() { using var ppc = new PriorityProducerConsumer <int>(maxPriority: 2, excludeDuplicates: false); Assert.ThrowsException <ArgumentOutOfRangeException>(() => ppc.Produce(value: 1, priority: 2)); }