需要双重刷新吗?

6

在刷新StreamWriter之后,是否有必要刷新Stream?

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?
}
2个回答

4
并不需要,StreamWriter.FlushStreamWriter.FlushAsync方法会在内部调用Stream.Flush

4
根据 MSDN 文档,这可能是为了 "仅仅确认" 而已...
StreamWriter.Flush():
清除当前写入器的所有缓冲区,并导致任何缓冲数据被写入基础流。
Stream.Flush():
在派生类中重写时,清除此流的所有缓冲区,并导致任何缓冲数据被写入基础设备。
然而,仔细查看 TypeDescriptor 中的代码会发现 StreamWriter.Flush() (我认为它的异步对应方法 FlushAsync 也是同理)是一个重载函数,它调用了主要函数并传递了两个布尔参数,这些参数指示 StreamWriter 刷新 Stream 和 Unicode 编码器。因此,一次对 StreamWriter.FlushAsync() 的调用,再加上使用 await 关键字来确保异步操作已经完全完成,就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接