private void TraverseChunk(TFChunk.TFChunk chunk, Action<PrepareLogRecord, int> processPrepare, Action<CommitLogRecord, int> processCommit, Action<SystemLogRecord, int> processSystem) { var result = chunk.TryReadFirst(); while (result.Success) { var record = result.LogRecord; switch (record.RecordType) { case LogRecordType.Prepare: { var prepare = (PrepareLogRecord)record; processPrepare(prepare, result.RecordLength); break; } case LogRecordType.Commit: { var commit = (CommitLogRecord)record; processCommit(commit, result.RecordLength); break; } case LogRecordType.System: { var system = (SystemLogRecord)record; processSystem(system, result.RecordLength); break; } default: throw new ArgumentOutOfRangeException(); } result = chunk.TryReadClosestForward(result.NextPosition); } }
private void TraverseChunkBasic(TFChunk.TFChunk chunk, CancellationToken ct, Action <CandidateRecord> process) { var result = chunk.TryReadFirst(); while (result.Success) { process(new CandidateRecord(result.LogRecord, result.RecordLength)); ct.ThrowIfCancellationRequested(); result = chunk.TryReadClosestForward(result.NextPosition); } }