public async Task CallingTransferBeforeReadAsync()
        {
            var testInput = new TestInput();
            var context = new ConnectionContext();
            context.SocketInput = new SocketInput(new MemoryPool());

            var exchanger = new MessageBodyExchanger(testInput.FrameContext);

            testInput.Add("Hello");

            exchanger.Transfer(5, false);

            var buffer1 = new byte[1024];
            var buffer2 = new byte[1024];
            var task1 = exchanger.ReadAsync(new ArraySegment<byte>(buffer1));
            var task2 = exchanger.ReadAsync(new ArraySegment<byte>(buffer2));

            Assert.True(task1.IsCompleted);
            Assert.False(task2.IsCompleted);

            await task1;

            var count1 = await task1;

            Assert.True(task1.IsCompleted);
            Assert.False(task2.IsCompleted);
            AssertASCII("Hello", new ArraySegment<byte>(buffer1, 0, count1));
        }
        public async Task TransferFinFirstDoesReturnsCompletedReadAsyncs()
        {

            var testInput = new TestInput();
            var context = new ConnectionContext();
            context.SocketInput = new SocketInput(new MemoryPool());

            var exchanger = new MessageBodyExchanger(testInput.FrameContext);

            testInput.Add("Hello");

            exchanger.Transfer(5, true);

            var buffer1 = new byte[1024];
            var buffer2 = new byte[1024];
            var task1 = exchanger.ReadAsync(new ArraySegment<byte>(buffer1));
            var task2 = exchanger.ReadAsync(new ArraySegment<byte>(buffer2));

            Assert.True(task1.IsCompleted);
            Assert.True(task2.IsCompleted);

            var count1 = await task1;
            var count2 = await task2;

            AssertASCII("Hello", new ArraySegment<byte>(buffer1, 0, count1));
            Assert.Equal(0, count2);
        }