2013-10-01 353 views
1

我希望我的Task在我執行其他操作之前完成。如果我使用異步等待任務<T>沒有異步/等待

Task.WaitAll(task); 

它肯定會阻止我的UI線程。不使用async/await(我正在使用.NET v4.0),如何完成異步等待Task的最佳方式是什麼?

+6

異步等待的概念正在傷害我的大腦... –

+0

爲什麼不直接同步運行? – doctorlove

+4

您只能撰寫延續('ContinueWith')。這就是說,你*可以*使用異步&等待和目標.NET 4.你必須使用VS2012,與[異步目標包](https://www.nuget.org/packages/Microsoft.Bcl.Async) 。 –

回答

7

當您將Microsoft.Bcl.Async NuGet package添加到項目中時,您也可以在.NET 4.0中使用async/await。除此之外,你沒有多少選擇 - 要麼使用異步調用,要麼使用你提到的方法阻塞你的線程。

但是,在使用異步方法時,您不會綁定到await。您也可以使用回調:

task.ContinueWith(r => { 
    /* code */ 
}); 
+4

如果'Microsoft.Bcl.Async'不是一個選項,那麼'Task.Factory.ContinueWhenAll'是'Task.WaitAll'的好替代品。 –