Is it necessary to flush a Stream after flushing 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?
}
According to the MSDN docs, this could be forgiven as “just making sure”…
StreamWriter.Flush():
Stream.Flush():
… However, a closer look at the code in TypeDescriptor shows that StreamWriter.Flush() (and I would assume its asynchronous counterpart FlushAsync) is an overload that calls the primary function, passing two Boolean parameters which instruct the StreamWriter to flush the Stream and the Unicode encoder as well. So, one call to StreamWriter.FlushAsync(), coupled with the
awaitkeyword to ensure the async operation has happened completely, should be fine.