public IAsyncReader <T> CreateAsyncReader(PipeReader reader, Encoding encoding, object?context = null) { Utils.CheckArgumentNull(reader, nameof(reader)); Utils.CheckArgumentNull(encoding, nameof(encoding)); // context is legally null var wrapper = new PipeReaderAdapter(reader, encoding); return(CreateAsyncReader(wrapper, context)); }
// continue after a ReadAsync call completes static async ValueTask <int> ReadAsync_ContinueAfterReadAsync(PipeReaderAdapter self, ValueTask <ReadResult> waitFor, Memory <char> into, CancellationToken cancellationToken) { tryAgainAsync: var res = await ConfigureCancellableAwait(self, waitFor, cancellationToken); var handled = self.MapByteSequenceToChar(res, into); // we need to wait for more to happen, returning 0 will // incorrectly signal that the writer has finished if (handled == 0 && !self.IsComplete) { waitFor = self.Inner.ReadAsync(cancellationToken); goto tryAgainAsync; } return(handled); }