public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { // Validate inputs Debug.Assert(buffer != _arrayPoolBuffer); _deflateStream.EnsureNotDisposed(); if (count <= 0) { return; } else if (count > buffer.Length - offset) { // The buffer stream is either malicious or poorly implemented and returned a number of // bytes larger than the buffer supplied to it. throw new InvalidDataException(SR.GenericInvalidData); } // Feed the data from base stream into the decompression engine. _deflateStream._inflater.SetInput(buffer, offset, count); // While there's more decompressed data available, forward it to the buffer stream. while (true) { int bytesRead = _deflateStream._inflater.Inflate(new Span <byte>(_arrayPoolBuffer)); if (bytesRead > 0) { await _destination.WriteAsync(new ReadOnlyMemory <byte>(_arrayPoolBuffer, 0, bytesRead), cancellationToken).ConfigureAwait(false); } else { break; } } }