我正在从一个GzipStream中读取,它将一个NetworkStream包装在一个UI事件处理程序中。
using (var gzipStream = new GzipStream(networkStream, CompressionMode.Decompress) {
await WriteSomethingToStream(gzipStream);
}
GzipStream包装的DeflateStream在其Dispose方法中有一个阻塞的Write调用,用于刷新缓冲区。
因此,在Using语句结束时,gzipStream.Dispose()
阻止,UI将阻止。
也没有GzipStream.DisposeAsync/CloseAsync()
方法。
那么在处理时我怎么不阻止? FlushAsync
不起作用,因为根据它的(Flush
)文档,它什么都不做。
此方法的当前实现不会刷新内部缓冲区。处理对象时刷新内部缓冲区。