2014-08-27 12 views
5

मैं इस विधि को अतुल्यकालिक रूप से कॉल करने के लिए कैसे संशोधित कर सकता हूं?फ़ाइल को अतुल्यकालिक रूप से बनाना

private void Write(string fileName, data) 
{ 
    File.WriteAllText(fileName, data);   
} 
+1

'StreamWriter.WriteAsync' या' FileStream.WriteAsync' –

+0

http://msdn.microsoft.com/en-us/library/jj155757.aspx – IVAAAN123

उत्तर

9

FileStream.WriteAsync (ध्यान दें कि आप उचित अधिभार जो एक bool का संकेत करता है, तो यह async :)

public async Task WriteAsync(string data) 
{ 
    var buffer = Encoding.ASCII.GetBytes(data); 

    using (var fs = new FileStream(@"File", FileMode.OpenOrCreate, 
     FileAccess.Write, FileShare.None, buffer.Length, true)) 
    { 
     await fs.WriteAsync(buffer, 0, buffer.Length); 
    } 
} 

चलाना चाहिए संपादित

आप उपयोग करना चाहते हैं लेता है का उपयोग करने के अपने string data और में देखो byte[] में परिवर्तन से बचें, आप अधिक सारणित और कम वर्बोज़ StreamWriter.WriteAsync ओवरलोड का उपयोग कर सकते हैं जो एक स्ट्रिंग स्वीकार करता है:

public async Task WriteAsync(string data) 
{ 
    using (var sw = new StreamWriter(@"FileLocation")) 
    { 
     await sw.WriteAsync(data); 
    } 
} 
+0

कॉलर्स को भी एसिंक सही बनना होगा? – Prabhu

+0

@ प्रभु हां, उसे 'WriteAsync' का इंतजार करना है –

+0

यह डेटा कहां लिखता है (जो एक स्ट्रिंग है) यहां? – Prabhu

2

तुम इतनी तरह एक Task अंदर विधि कॉल कर सकते हैं:

Task.Factory.StartNew(() => File.WriteAllText("test.txt","text")); 

वहाँ कई तरीके एक काम शुरू करने के लिए है और यह सिर्फ उनमें से एक है, तो आप एक अधिक here पढ़ें।

+4

आप एक आईओ बाध्य अनुरोध करने के लिए एक ThreadPool धागे का उपयोग जरूरत नहीं है। यह कॉल को सचमुच एसिंक्रोनस –

+0

नहीं बना रहा है यह युवाल के उत्तर से कम है। –

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