2013-02-06 106 views
-1

我有相似之處裝載兩個大型文件 到目前爲止,我有這樣的代碼如何異步運行

下面的代碼是點擊按鈕的方法

private async void MILoadLogFile_Click(object sender, RoutedEventArgs e) 
{  
    ... 
    if (oFD.ShowDialog() == true) 
    { 
     await myLogSession.LoadCompassLogAsync(oFD.FileName); 
     await myLogSession.LoadCoreServiceLogAsync(oFD.FileName); 
    } 
} 

加載方法:

​​

LoadCoreServiceLogAsync幾乎與LoadCompassLogAsync相同。

這兩個加載方法按順序運行。我希望他們能夠平行運行。

+1

有一個問題在這裏? – CodingGorilla

回答

1

您的代碼將在另一個之後運行一個任務。同時運行兩個任務,你可以使用Task.WaitAll方法:

var loadCompassLogTask = myLogSession.LoadCompassLogAsync(oFD.FileName); 
var loadCoreServiceLogTask = myLogSession.LoadCoreServiceLogAsync(oFD.FileName); 
Task.WaitAll(loadCompassLogTask, loadCoreServiceLogTask); 

或者,如果你想使用await你可以使用Task.WhenAll

var loadCompassLogTask = myLogSession.LoadCompassLogAsync(oFD.FileName); 
var loadCoreServiceLogTask = myLogSession.LoadCoreServiceLogAsync(oFD.FileName); 
await Task.WhenAll(loadCompassLogTask, loadCoreServiceLogTask); 
+2

+1爲第二個選項,這將是優選的,因爲這似乎是從UI線程調用。 –

+0

@Daniel Kelley,是否有可能在不使用UI線程的情況下使用第二個選項? – persianLife

+1

@pars我的意思是,你從UI線程調用兩個方法(你響應一個點擊事件)。但是,通過使用'await Task.WhenAll',你不會阻塞UI線程。我相信第一個選項會導致UI線程被阻止。 –