2017-08-16 3 views
0

Ich mag würde Async bis 2, Dateien schreiben einige Daten, ich habe so etwas wie dies versucht:Schreiben auf mehrere Dateien asynchron

private static void Main(string[] args) 
{ 
    FileStream file1 = File.Create(@"D:\test\plik1.dat"); 
    FileStream file2 = File.Create(@"D:\test\plik2.dat"); 

    var f1 = await write(file1); 
    var f2 = await write(file2); 
    for (int i = 0; i < 1024 * 1024; i++) 
    { 
     if (i % 100 == 0) 
      Console.Write("X"); 
    } 
} 

private static async Task write(FileStream fs) 
{ 
    var zap = new StreamWriter(fs); 
    for (long i = 0; i < 1024 * 1024 * 250; i++) 
    { 
     zap.WriteAsync("xxx"); 
    } 
} 

Der Compiler Fehler ist:

Die ‚erwarten‘ Der Operator kann nur innerhalb einer asynchronen Methode verwendet werden.

wie man es richtig macht?

möchte ich auch Schleifenanweisung mit console.Write("X); als async

kann mir jemand helfen, zu tun? ich kann nicht einige grundlegende Beispiele auf Google finden ...

+1

Der ‚erwartet‘ Operator kann nur innerhalb einer Asynchron-Methode verwendet werden. Erwägen Sie, diese Methode mit dem Modifizierer 'async' zu markieren und den Rückgabetyp in 'Task' zu ändern – SharkyShark

Antwort

0

Versuchen Sie Ihr Ergebnis nach dem for-Schleife wartet:

private static void Main(string[] args) 
{ 
    FileStream file1 = File.Create(@"D:\test\plik1.dat"); 
    FileStream file2 = File.Create(@"D:\test\plik2.dat"); 

    var f1 = Write(file1); 
    var f2 = Write(file2); 
    var work = DoWork(); 

    Task.WaitAll(f1,f2,work); 
} 

private static async Task DoWork() 
{ 
    for (int i = 0; i < 1024 * 1024; i++) 
    { 
     if (i % 100 == 0) 
      Console.Write("X"); 
    } 
} 

private static async Task Write(FileStream fs) 
{ 
    var zap = new StreamWriter(fs); 
    for (long i = 0; i < 1024 * 1024 * 250; i++) 
    { 
     await zap.WriteAsync("xxx"); 
    } 
} 
+0

es stürzt auf Task.WaitAll (f1, f2) mit Fehler ab, der besagt, dass der Stream bereits von vorheriger Operation im Stream verwendet wurde ... – SharkyShark

+0

absolut . Ihre Streams zielen auf dieselbe Datei ab. Sie sollten den zweiten Dateinamen in ie 'plik2.dat' ändern, um dieses Verhalten zu vermeiden. – senz

+0

nein, ich habe den Dateipfad geändert, bevor – SharkyShark

Verwandte Themen