2012-12-13 26 views
6

Có cần thiết tuôn ra Stream sau khi xả một số StreamWriter không?Yêu cầu tuôn ra đôi?

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

Trả lời

4

Theo các tài liệu MSDN, điều này có thể được tha thứ như "chỉ đảm bảo" ...

StreamWriter.Flush():

Xóa tất cả bộ đệm cho các nhà văn hiện tại và gây ra bất kỳ đệm dữ liệu được ghi vào luồng cơ bản.

Stream.Flush():

Khi ghi đè trong một lớp học có nguồn gốc, xóa tất cả bộ đệm cho dòng này và gây ra bất kỳ dữ liệu đệm để được ghi vào thiết bị cơ bản.

... Tuy nhiên, xem xét kỹ hơn mã trong TypeDescriptor cho thấy rằng StreamWriter.Flush() (và tôi giả định đối số không đồng bộ FlushAsync) là quá tải gọi hàm chính, chuyển hai tham số Boolean hướng dẫn StreamWriter xóa luồng và bộ mã hóa Unicode. Vì vậy, một cuộc gọi đến StreamWriter.FlushAsync(), cùng với từ khóa await để đảm bảo hoạt động không đồng bộ đã xảy ra hoàn toàn, sẽ ổn.

4

Đó là không cần thiết, các StreamWriter.FlushStreamWriter.FlushAsync phương pháp gọi Stream.Flush nội bộ.

Các vấn đề liên quan