示例#1
0
        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));
        }
示例#2
0
            // 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);
            }