7
Làm cách nào để thực thi System.Threading.Task khi tiếp tục hai hoặc nhiều kết quả Task khác?Làm cách nào để hợp nhất hai kết quả Nhiệm vụ trong nhiệm vụ thứ ba?
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;
}
Công trình này, nhưng double ContinueWith có vẻ không hiệu quả. Có cách nào tốt hơn để làm điều này, có lẽ với một TaskCompletionSource? (Tôi không muốn sử dụng khóa hoặc Task.WaitAll.)
Điều này trông giống như những gì tôi muốn, mặc dù quá tải 'ContinueWhenAll' mà bạn liên kết không thực hiện hoặc trả về' Tác vụ '. Nếu bạn cập nhật liên kết của mình lên http://msdn.microsoft.com/en-us/library/ee362175.aspx, tôi sẽ chấp nhận câu trả lời của bạn. –
Đẹp! Tôi đã bỏ lỡ ContinueWhenAll. Chúc mừng! –