2017-08-16 68 views
0

我想編寫異步到2檔的一些數據,我已經嘗試過這樣的事情:寫入異步多個文件

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"); 
    } 
} 

編譯器錯誤是:

的「等待」運算符只能在異步方法中使用。

如何正確地做到這一點?

我想也是這樣做循環指令與console.Write("X);爲異步

有人可以幫助我嗎? 我找不到對谷歌的一些基本的例子...

+1

的「等待」操作只能異步方法中使用。考慮使用'async'修飾符標記此方法,並將其返回類型更改爲'Task' – SharkyShark

回答

0

嘗試後的for循環,等待你的結果:

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

它在Task.WaitAll(f1,f2)上崩潰,並顯示錯誤,表示該流已被前一次操作在流中使用... – SharkyShark

+0

絕對。你的流目標是相同的文件。你應該改變第二個文件名在ie'plik2.dat'中以避免這種行爲 – senz

+0

不,我已經在 – SharkyShark