public async Task CopyFromSourceToDestinationAsync()
{
_deflateStream.AsyncOperationStarting();
try
{
// Flush any existing data in the inflater to the destination stream.
while (true)
{
int bytesRead = _deflateStream._inflater.Inflate(_arrayPoolBuffer, 0, _arrayPoolBuffer.Length);
if (bytesRead > 0)
{
await _destination.WriteAsync(new ReadOnlyMemory <byte>(_arrayPoolBuffer, 0, bytesRead), _cancellationToken).ConfigureAwait(false);
}
else
{
break;
}
}
// Now, use the source stream's CopyToAsync to push directly to our inflater via this helper stream
await _deflateStream._stream.CopyToAsync(this, _arrayPoolBuffer.Length, _cancellationToken).ConfigureAwait(false);
}
finally
{
_deflateStream.AsyncOperationCompleting();
ArrayPool <byte> .Shared.Return(_arrayPoolBuffer);
_arrayPoolBuffer = null;
}
}