public async Task ConsumeMessagesTest_many_messages_two_workers()
        {
            //ARRANGE
            var messageToEnque = 100000;
            var consumed       = 0;
            var logger         = new LogProviderMock();
            var listener       = new MessageListener1(m => Interlocked.Increment(ref consumed));
            Func <ITransportConfiguration> configuration = () =>
            {
                var config = new TransportConfiguration
                {
                    ConsumerPeriod = Timeout.InfiniteTimeSpan
                };
                config.Listeners.Add(listener);
                return(config);
            };
            var transport = new InMemoryQueueTransport(logger, configuration);

            var message = new byte[] { 0, 1, 2 };
            await transport.Start();

            for (var i = 0; i < messageToEnque; i++)
            {
                transport.Enque(message);
            }

            //ACT

            var task = Task.Factory.StartNew(() =>
            {
                transport.Consume(configuration());
            });

            var task1 = Task.Factory.StartNew(() =>
            {
                transport.Consume(configuration());
            });
            await Task.WhenAll(task, task1);

            while (!transport.IsEmpty)
            {
                Thread.Sleep(1);
            }
            //ASSERT
            Assert.AreEqual(messageToEnque, consumed);
            Assert.AreEqual(0, transport.PendingMessages);
        }