コード例 #1
0
        public async Task StreamAsReadableChannelReadStream()
        {
            var stream = new StreamAndChannel();
            var sw     = new StreamWriter(stream);

            sw.Write("Hello");
            sw.Flush();

            var channel = stream.AsReadableChannel();
            var result  = await channel.ReadAsync();

            var buffer  = result.Buffer;
            var segment = buffer.ToArray();
            var data    = Encoding.UTF8.GetString(segment);

            Assert.Equal("Hello", data);
            channel.Advance(buffer.End);

            sw.Write("World");
            sw.Flush();
            stream.FinishWriting();

            var readBuf = new byte[512];
            int read    = await stream.ReadAsync(readBuf, 0, readBuf.Length);

            Assert.Equal("World", Encoding.UTF8.GetString(readBuf, 0, read));
        }
コード例 #2
0
        public async Task StreamAsReadableChannelUsesUnderlyingChannelIfAvailable()
        {
            var stream = new StreamAndChannel();
            var sw     = new StreamWriter(stream);

            sw.Write("Hello");
            sw.Flush();
            stream.FinishWriting();

            var channel = stream.AsReadableChannel();

            while (true)
            {
                var result = await channel.ReadAsync();

                var buffer = result.Buffer;
                if (buffer.IsEmpty && result.IsCompleted)
                {
                    // Done
                    break;
                }

                var segment = buffer.ToArray();

                var data = Encoding.UTF8.GetString(segment);
                Assert.Equal("Hello", data);
                channel.Advance(buffer.End);
            }
        }