spe*_*der 6 c# flush stream streamwriter
冲洗Stream后是否需要冲洗StreamWriter?
public static async Task WriteStringAsync(this Stream stream, string messageString)
{
var encoding = new UTF8Encoding(false); //no BOM
using (var streamWriter = new StreamWriter(stream, encoding))
{
await streamWriter.WriteAsync(messageString);
await streamWriter.FlushAsync();
}
await stream.FlushAsync(); //is this necessary?
}
Run Code Online (Sandbox Code Playgroud)
根据 MSDN 文档,这可以被理解为“只是确保”......
StreamWriter.Flush():
清除当前写入器的所有缓冲区,并使所有缓冲数据写入底层流。
Stream.Flush():
在派生类中重写时,清除此流的所有缓冲区,并导致所有缓冲数据写入底层设备。
...但是,仔细查看 TypeDescriptor 中的代码会发现 StreamWriter.Flush() (我假设它的异步对应项 FlushAsync)是一个重载,它调用主函数,传递两个布尔参数,指示 StreamWriter 刷新还有 Stream 和 Unicode 编码器。因此,对 StreamWriter.FlushAsync() 的一次调用,加上await关键字以确保异步操作完全发生,应该没问题。