public void TryDequeueFromAnyAsync_Empty_DoesNotComplete()
        {
            Test.Async(async () =>
            {
                var queue1 = new AsyncProducerConsumerQueue<int>();
                var queue2 = new AsyncProducerConsumerQueue<int>();
                var queues = new[] { queue1, queue2 };

                var task = queues.TryDequeueFromAnyAsync();

                await AssertEx.NeverCompletesAsync(task);
            });
        }
        public void TryDequeueFromAnyAsync_Cancelled_Throws()
        {
            Test.Async(async () =>
            {
                var queue1 = new AsyncProducerConsumerQueue<int>();
                var queue2 = new AsyncProducerConsumerQueue<int>();
                var queues = new[] { queue1, queue2 };
                var cts = new CancellationTokenSource();
                var task = queues.TryDequeueFromAnyAsync(cts.Token);

                cts.Cancel();

                await AssertEx.ThrowsExceptionAsync<OperationCanceledException>(() => task);
            });
        }
        public void TryDequeueFromAnyAsync_EmptyAndComplete_ReturnsFailed()
        {
            Test.Async(async () =>
            {
                var queue1 = new AsyncProducerConsumerQueue<int>();
                queue1.CompleteAdding();
                var queue2 = new AsyncProducerConsumerQueue<int>();
                queue2.CompleteAdding();
                var queues = new[] { queue1, queue2 };

                var result = await queues.TryDequeueFromAnyAsync();

                Assert.IsFalse(result.Success);
            });
        }