private async ValueTask WriteBlockSignatures(CancellationToken ct) { FlushResult flushResult = default; int writtenSinceFlush = new SignatureHeader().Size; while (!flushResult.IsCompleted) { var readResult = await _reader.Buffer(_options.BlockLength, ct).ConfigureAwait(false); if (readResult.Buffer.IsEmpty) { return; } var sig = ComputeSignature(readResult.Buffer); _reader.AdvanceTo(readResult.Buffer.End); writtenSinceFlush += _writer.Write(sig, _options); if (writtenSinceFlush >= _flushThreshhold) { flushResult = await _writer.FlushAsync(ct).ConfigureAwait(false); writtenSinceFlush = 0; } } }