public async Task <bool> MoveNextAsync(CancellationToken cancellation) { var row = _rowPool.Allocate(); var state = State.start; while (state != State.end2) { if (_currentChunk == null) { _currentChunk = await _reader.ReadAsync(cancellation); if (_currentChunk == null) { break; } } state = Parse(state, row); } return(CompleteRead(row)); }