public async ValueTask <bool> MoveNextColumn() { if (!_initialised) { return(false); } if (_endOfPipe) { return(false); } if (_atEndOfLine) { return(false); } _valueBuffer.Reset(); bool complete; do { var readResult = await _pipe.Reader.ReadAsync().ConfigureAwait(false); complete = ReadColumn(readResult.Buffer, out var position); if (readResult.IsCompleted) { _endOfPipe = true; return(false); } _pipe.Reader.AdvanceTo(position); } while (!complete); _columnActive = !_endOfPipe; _currentColumn++; return(!_endOfPipe); }