internal new async Task Consume(CancellationToken cancellationToken) { if (State == RowState.NotRead) { await _oldRowTupleEnumerable.Consume(cancellationToken); await ReadBuffer.EnsureAsync(3); var tupleType = (TupleType)ReadBuffer.ReadByte(); Debug.Assert(tupleType == TupleType.NewTuple); _ = ReadBuffer.ReadUInt16(); // numColumns, } await base.Consume(cancellationToken); }
public override async IAsyncEnumerator <ReplicationValue> GetAsyncEnumerator(CancellationToken cancellationToken = default) { // This will throw if we're already reading (or consumed) the second row var enumerator = base.GetAsyncEnumerator(cancellationToken); await _oldRowTupleEnumerable.Consume(cancellationToken); await ReadBuffer.EnsureAsync(3); var tupleType = (TupleType)ReadBuffer.ReadByte(); Debug.Assert(tupleType == TupleType.NewTuple); _ = ReadBuffer.ReadUInt16(); // numColumns, while (await enumerator.MoveNextAsync()) { yield return(enumerator.Current); } }