Beispiel #1
0
        public void ReaderWriterPriorityQueueTest()
        {
            var producer   = new ReaderWriterPriorityQueue <string>();
            var resetEvent = new ManualResetEventSlim(false);

            var _ = Task.Factory.StartNew(() =>
            {
                var item = producer.Dequeue();
                Assert.Equal("This is a higher message", item);
                // ReSharper disable once AccessToDisposedClosure
                resetEvent.Set();
            });

            producer.Enqueue("This is a message");
            producer.Enqueue("This is a higher message", 2);
            resetEvent.Wait();
            resetEvent.Dispose();
        }
 /// <summary>
 /// Process queued items.
 /// </summary>
 /// <param name="token"></param>
 /// <returns>awaitable task</returns>
 protected sealed override async Task Run(CancellationToken token)
 {
     var item  = _queue.Dequeue();
     var tasks = _consumers.Select(x => x.Consume(item));
     await Task.Run(async() => await Task.WhenAll(tasks), token);
 }