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() { using (var ppc = new PriorityProducerConsumer <int>()) { ppc.Produce(5); var consumerTask = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask.Status); Assert.AreEqual(5, consumerTask.Result); } }
public async Task PriorityProducerConsumer_Pending_Dispose() { var ppc = new PriorityProducerConsumer <int>(); var consumerTask = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask.Status); ppc.Dispose(); await consumerTask.ContinueWith(t => { }); Assert.AreEqual(TaskStatus.Canceled, consumerTask.Status); }
public async Task PriorityProducerConsumer_Pending() { var ppc = new PriorityProducerConsumer <int>(); var consumerTask = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask.Status); ppc.Produce(5); await consumerTask; Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask.Status); Assert.AreEqual(5, consumerTask.Result); }
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_Pending_Priority2() { using (var ppc = new PriorityProducerConsumer <int>(2)) { var consumerTask1 = ppc.ConsumeAsync(); var consumerTask2 = ppc.ConsumeAsync(); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask1.Status); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask2.Status); ppc.Produce(6, 1); await consumerTask1; Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask1.Status); Assert.AreEqual(TaskStatus.WaitingForActivation, consumerTask2.Status); Assert.AreEqual(6, consumerTask1.Result); ppc.Produce(5); await consumerTask2; Assert.AreEqual(TaskStatus.RanToCompletion, consumerTask2.Status); 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); }
internal AnalysisQueue() { _ppc = new PriorityProducerConsumer <QueueItem>(4, excludeDuplicates: true, comparer: QueueItemComparer.Instance); _queueControlCounter = new CountdownDisposable(() => _queueEnabled.Reset(), () => _queueEnabled.Set()); _consumerTask = Task.Run(ConsumerLoop); }
public Prioritizer() { _ppc = new PriorityProducerConsumer <QueueItem>(4); Task.Run(ConsumerLoop); }
public Prioritizer() { _ppc = new PriorityProducerConsumer <QueueItem>(maxPriority: (int)Priority.Length); Task.Run(ConsumerLoop).DoNotWait(); }
internal AnalysisQueue() { _ppc = new PriorityProducerConsumer <QueueItem>(4, excludeDuplicates: true, comparer: QueueItemComparer.Instance); _enqueuedGroups = new HashSet <IGroupableAnalysisProject>(); _consumerTask = Task.Run(ConsumerLoop); }
public void PriorityProducerConsumer_MaxPriority() { using var ppc = new PriorityProducerConsumer <int>(maxPriority: 2, excludeDuplicates: false); Assert.ThrowsException <ArgumentOutOfRangeException>(() => ppc.Produce(value: 1, priority: 2)); }