2012-12-13 70 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)是調用主要功能的過載,傳遞兩個參數布爾其中指示StreamWriter刷新Stream和Unicode編碼器。所以,一個調用StreamWriter.FlushAsync(),加上關鍵字await以確保異步操作完全發生,應該沒問題。

4

這是沒有必要的StreamWriter.FlushStreamWriter.FlushAsync方法調用Stream.Flush內部。