コード例 #1
0
        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;
                }
            }
        }