2013-02-06 80 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线程被阻止。 –