public void SingleThread_Post_ConsumesAllItems(int count)
        {
            TestSingleConsumerTask task;

            using (task = new TestSingleConsumerTask())
            {
                for (var i = 0; i < count; i++)
                {
                    task.Post(i);
                }
            }

            task.Count.ShouldBe(count);
        }
        public async Task MultipleThreads_Post_ConsumesAllItems(int count)
        {
            const int numberOfThreads = 7;
            TestSingleConsumerTask task;

            using (task = new TestSingleConsumerTask())
            {
                var producers = Enumerable
                                .Range(0, numberOfThreads)
                                .Select(_ => Task.Run(() =>
                {
                    for (var i = 0; i < count; i++)
                    {
                        // ReSharper disable once AccessToDisposedClosure
                        task.Post(i);
                    }
                }))
                                .ToArray();

                await Task.WhenAll(producers);
            }

            task.Count.ShouldBe(numberOfThreads * count);
        }