7
如何執行System.Threading.Task作爲兩個或更多其他任務結果的延續?如何在第三個任務中合併兩個任務結果?
public Task<FinalResult> RunStepsAsync()
{
Task<Step1Result> task1 = Task<Step1Result>.Factory.StartNew(Step1);
// Use the result of step 1 in steps 2A and 2B
Task<Step2AResult> task2A = task1.ContinueWith(t1 => Step2A(t1.Result));
Task<Step2BResult> task2B = task1.ContinueWith(t1 => Step2B(t1.Result));
// Now merge the results of steps 2A and 2B in step 3
Task<FinalResult> task3 = task2A
.ContinueWith(
t2A => task2B.ContinueWith(
t2B => Step3(t2A.Result, t2B.Result)))
.Unwrap();
return task3;
}
這個工作,但雙ContinueWith似乎效率低下。有沒有更好的方法來做到這一點,也許有一個TaskCompletionSource? (我不想使用鎖或Task.WaitAll。)
這看起來像我想要的,雖然你連接的「ContinueWhenAll」超載不會返回或者返回任務。如果您更新鏈接到http://msdn.microsoft.com/en-us/library/ee362175.aspx,我會接受您的答案。 –
2012-04-24 08:45:44
美麗!我錯過了ContinueWhenAll。乾杯! – 2012-04-24 08:52:30