Example #1
0
        public static async Task <byte[]> ReadAllAsync(this PipeReader pipeReader)
        {
            while (true)
            {
                var result = await pipeReader.ReadAsync();

                try
                {
                    if (result.IsCompleted)
                    {
                        return(result.Buffer.ToArray());
                    }
                }
                finally
                {
                    // Consume nothing, just wait for everything
                    pipeReader.AdvanceTo(result.Buffer.Start, result.Buffer.End);
                }
            }
        }
Example #2
0
        public static async Task <byte[]> ReadAsync(this PipeReader pipeReader, int numBytes)
        {
            while (true)
            {
                var result = await pipeReader.ReadAsync();

                if (result.Buffer.Length < numBytes)
                {
                    pipeReader.AdvanceTo(result.Buffer.Start, result.Buffer.End);
                    continue;
                }

                var buffer = result.Buffer.Slice(0, numBytes);

                var bytes = buffer.ToArray();

                pipeReader.AdvanceTo(buffer.End);

                return(bytes);
            }
        }
Example #3
0
        public static async Task CopyToAsync(this PipeReader input, Stream stream, int bufferSize, CancellationToken cancellationToken)
        {
            // TODO: Use bufferSize argument
            while (!cancellationToken.IsCancellationRequested)
            {
                var result = await input.ReadAsync();

                var inputBuffer = result.Buffer;
                try
                {
                    if (inputBuffer.IsEmpty && result.IsCompleted)
                    {
                        return;
                    }

                    await inputBuffer.CopyToAsync(stream);
                }
                finally
                {
                    input.AdvanceTo(inputBuffer.End);
                }
            }
        }
Example #4
0
        private static async Task <int> ReadAsyncAwaited(this PipeReader input, ArraySegment <byte> destination)
        {
            while (true)
            {
                var result = await input.ReadAsync();

                var inputBuffer = result.Buffer;

                var length = (int)Math.Min(inputBuffer.Length, destination.Count);
                var sliced = inputBuffer.Slice(0, length);
                sliced.CopyTo(destination);
                input.AdvanceTo(sliced.End);

                if (length != 0)
                {
                    return(length);
                }

                if (result.IsCompleted)
                {
                    return(0);
                }
            }
        }
Example #5
0
        public override async ValueTask <ReadResult> ReadAsync(CancellationToken cancellationToken = default)
        {
            LastReadResult = await _inner.ReadAsync(cancellationToken);

            return(LastReadResult);
        }