2012-12-13 57 views
6

StreamWriter ürününü yıkadıktan sonra Stream'u yıkamak gerekiyor mu?Çift yıkama gerekli mi?

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

cevap

4

MSDN Dokümanlar göre bu ... "Sadece emin olmak" olarak

StreamWriter.Flush() affetmiş olabilir:

akım yazar için tüm tamponlarını siler ve herhangi tamponlu neden temel akıma yazılacak veriler.

Stream.Flush():

türetilmiş bir sınıfta geçersiz

, bu akış için, tüm tampon siler ve herhangi bir tamponlanmış veri yatan aygıtın yazılmasına neden olur.

... Ancak TypeDescriptor kod daha yakından bakmak StreamWriter.Flush() (ve onun asenkron meslektaşı FlushAsync varsayılabilir) iki Boole parametreleri geçen birincil işlevini çağıran bir aşırı yük olduğunu göstermektedir StreamWriter'e Stream ve Unicode kodlayıcıyı da akıtmaya yönlendirin. Bu nedenle, async işleminin tamamen gerçekleştiğinden emin olmak için await anahtar sözcüğüyle birleştirilen StreamWriter.FlushAsync() öğesine bir çağrı iyi yapılmalıdır.

4

O StreamWriter.Flush ve StreamWriter.FlushAsync yöntemleri içten Stream.Flush diyoruz, buna gerek yok.