6

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?
}
4

2 に答える 2

4

必須ではStreamWriter.Flushありません。メソッドは内部でStreamWriter.FlushAsync呼び出します。Stream.Flush

于 2012-12-13T22:09:38.610 に答える
4

MSDNのドキュメントによると、これは「確認するだけ」として許される可能性があります...

StreamWriter.Flush():

現在のライターのすべてのバッファーをクリアし、バッファーに入れられたデータを基になるストリームに書き込みます。

Stream.Flush():

派生クラスでオーバーライドされると、このストリームのすべてのバッファーがクリアされ、バッファーされたデータが基になるデバイスに書き込まれます。

...ただし、TypeDescriptorのコードを詳しく見ると、StreamWriter.Flush()(およびその非同期の対応するFlushAsyncを想定)は、StreamWriterにフラッシュするように指示する2つのブールパラメーターを渡して、プライマリ関数を呼び出すオーバーロードであることがわかります。ストリームとUnicodeエンコーダーも同様です。したがって、StreamWriter.FlushAsync()の1回の呼び出しとawait、非同期操作が完全に行われたことを確認するためのキーワードを組み合わせれば、問題はありません。

于 2012-12-13T22:14:36.123 に答える