7
¿Cómo puedo ejecutar System.Threading.Task como la continuación de dos o más resultados de tareas?¿Cómo combinar dos resultados de tareas en una tercera tarea?
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;
}
Esto funciona, pero el doble ContinueCon parece ineficiente. ¿Hay una mejor manera de hacerlo, quizás con TaskCompletionSource? (No quiero utilizar bloqueos o Task.WaitAll.)
Esto se parece a lo que quiero, aunque el 'ContinueWhenAll' sobrecarga que se vincula a no tomar o devolver' 'Grupo de. Si actualiza su enlace a http://msdn.microsoft.com/en-us/library/ee362175.aspx, aceptaré su respuesta. –
¡Hermoso! Me perdí de ContinueWhenAll. ¡Aclamaciones! –