public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { //Assume threadsafe while (count > 0) { if (_partialFramePos + count >= _frameSize) { int partialSize = _frameSize - _partialFramePos; Buffer.BlockCopy(buffer, offset, _partialFrameBuffer, _partialFramePos, partialSize); offset += partialSize; count -= partialSize; _partialFramePos = 0; int encFrameSize = _encoder.EncodeFrame(_partialFrameBuffer, 0, _frameSize, _buffer, 0); await base.WriteAsync(_buffer, 0, encFrameSize, cancellationToken).ConfigureAwait(false); } else { Buffer.BlockCopy(buffer, offset, _partialFrameBuffer, _partialFramePos, count); _partialFramePos += count; break; } } }