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 ग्रहण करेंगे) एक अधिभार प्राथमिक फ़ंक्शन को कॉल करने, दो बूलियन पैरामीटर प्रदान करने के लिए है जो StreamWriter को स्ट्रीम और यूनिकोड एन्कोडर को फ्लश करने के लिए निर्देश दें। तो, स्ट्रीमवाइटर.फ्लशएसिंक() के लिए एक कॉल, await कीवर्ड के साथ मिलकर यह सुनिश्चित करने के लिए कि एसिंक ऑपरेशन पूरी तरह से हुआ है, ठीक होना चाहिए।

4

यह आवश्यक नहीं है, StreamWriter.Flush और StreamWriter.FlushAsync तरीकों आंतरिक रूप से फोन Stream.Flush

संबंधित मुद्दे