2014-08-27 15 views
5

Wie kann ich diese Methode ändern, um sie asynchron aufzurufen?Eine Datei asynchron erstellen

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

'StreamWriter.WriteAsync' oder' FileStream.WriteAsync' –

+0

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

Antwort

9

Blick in FileStream.WriteAsync (Beachten Sie die richtige Überlastung verwenden, die angibt, eine bool nimmt, wenn es 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); 
    } 
} 

bearbeiten

laufen sollten, wenn Sie Ihre string data verwenden möchten, und Vermeiden Sie die Umwandlung in eine byte[], können Sie die abstrahierte und weniger ausführliche StreamWriter.WriteAsync Überladung verwenden, die eine Zeichenfolge akzeptiert:

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

Die Anrufer müssen dann auch asynchron werden, oder? – Prabhu

+0

@Prabhu Ja, er muss auf 'WriteAsync' warten. –

+0

Wo schreibt er die Daten (was eine Zeichenkette ist)? – Prabhu

2

können Sie rufen die Methode in einem Task etwa so:

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

Es gibt zahlreiche Möglichkeiten, ist eine Aufgabe zu starten und das ist nur einer von ihnen, ein Sie mehr here lesen.

+4

Sie brauchen nicht einen Threadpool-Thread verwenden, um eine IO gebundene Anfrage zu machen. Dies macht den Anruf nicht wirklich asynchron –

+0

Dies ist Yuvals Antwort unterlegen. –