Как объединить два результата задачи в третью задачу?

Как выполнить System.Threading.Task как продолжение двух или более других результатов 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.)

9
задан Joel V. Earnest-DeYoung 24 April 2012 в 11:21
поделиться