6

Stream冲洗 a后是否需要冲洗 a 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?
}
4

2 回答 2

4

没必要,StreamWriter.FlushandStreamWriter.FlushAsync方法在Stream.Flush内部调用。

于 2012-12-13T22:09:38.610 回答
4

根据 MSDN 文档,这可以被原谅为“只是确保”......

StreamWriter.Flush():

清除当前写入器的所有缓冲区,并导致将任何缓冲数据写入基础流。

Stream.Flush():

在派生类中重写时,清除此流的所有缓冲区并导致将任何缓冲数据写入底层设备。

...但是,仔细查看 TypeDescriptor 中的代码会发现 StreamWriter.Flush()(我假设它的异步对应 FlushAsync)是调用主函数的重载,传递两个布尔参数,指示 StreamWriter 刷新Stream 和 Unicode 编码器也是如此。因此,对 StreamWriter.FlushAsync() 的一次调用,再加上await确保异步操作完全发生的关键字应该没问题。

于 2012-12-13T22:14:36.123 回答