2015-01-03 228 views
2

我有點困惑,應該如何實現多個異步任務的工作流程。例如 - 任務1開始,任務1完成,任務2開始,任務2完成時開始任務N等。
或者另一個詞 - 異步任務如何通知「父母」任務有關他的狀態?我想可以在這裏使用TaskStatus,但不知道具體如何。 我在MSDN上搜索過,但沒有這種模式的完整例子。
P.S.我編輯我的問題,以專注於一個具體問題。異步模式 - 上一個任務完成時運行任務

+0

我沒有downvote,但你已經問了幾件事情可能是他們自己的問題,因爲每個都需要一個相當深入的答案。並行執行若干任務:http://stackoverflow.com/q/12337671/84206異常處理:http://msdn.microsoft.com/en-us/library/dd537614(v=vs.110).aspx有很多其他變化:http://stackoverflow.com/questions/tagged/async-await – AaronLS

回答

5

如果你真的想迫不及待地開始TASK2直到TASK1完成後,一個辦法是這樣的:

Task<string> task1 = GetUsername(); 
string username = await task1; // blocks(or "waits") here until GetUsername returns 

Task<string> task2 = GetConfig(username); // since we have the return from above, we can pass it here 
string config = await task2 ; // blocks here until GetConfig returns 

注意,在這個任務1和Task2在彼此平行不執行,因爲我們明確地按照您的要求,等待一個完成後再開始另一個。雖然它們與調用它們的線程相比是異步的。

如果你有一個List<Task>並希望順序執行它們,那麼這種方法會有所不同,並行執行它們將是一種不同的方法。

如果你看看周圍的計算器,你會看到很多使用Wait,WaitAll,WhenAll等方法的例子,這些方法可以讓你做很多不同組合的事情。

+0

是的,我真的需要等到前一個任務完成,因爲它將一些ID傳遞給需要下一個任務的數據庫。 –