2012-12-13 23 views
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? 
} 

答えて

4

は、MSDNのドキュメントによると、これは...「だけを確認すること」と

StreamWriter.Flush()を許さことができます:

は、現在の作家のためのすべてのバッファをクリアし、バッファ原因基本となるストリームに書き込まれるデータ

Stream.Flush():派生クラスでオーバーライドされた場合

、このストリームのすべてのバッファーをクリアし、基礎となるデバイスに書き込まれる任意のバッファされたデータを生じさせます。しかし、TypeDescriptor内のコードをよく見がStreamWriter.Flush()(と私はその非同期対応FlushAsyncを引き受けるが)これは、2つのブールパラメータを渡し、主な機能を呼び出す過負荷であることを示している

... StreamWriterにストリームとUnicodeエンコーダも同様にフラッシュするように指示します。したがって、StreamWriter.FlushAsync()への1つの呼び出しは、awaitキーワードと組み合わされ、非同期操作が完全に行われたことを保証し、うまくいくはずです。

4

それはStreamWriter.FlushStreamWriter.FlushAsync方法は、内部Stream.Flushを呼び出し、必要はありません。

関連する問題