Así que recientemente me dijeron que cómo estaba usando mi .ContinueWith for Tasks no era la forma correcta de usarlos. Todavía tengo que encontrar evidencia de esto en Internet, así que les preguntaré y veré cuál es la respuesta. Aquí hay un ejemplo de cómo uso .ContinueWith:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
Console.WriteLine("Step 3");
});
}
Ahora sé que este es un ejemplo simple y se ejecutará muy rápido, pero asuma que cada tarea realiza una operación más larga. Entonces, lo que me dijeron es que en .ContinueWith, debes decir prevTask.Wait (); de lo contrario, podría trabajar antes de que finalice la tarea anterior. ¿Es eso siquiera posible? Asumí que mi segunda y tercera tarea solo se ejecutarían una vez que finalizara su tarea anterior.
Lo que me dijeron cómo escribir el código:
public Task DoSomething()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Step 1");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 2");
})
.ContinueWith((prevTask) =>
{
prevTask.Wait();
Console.WriteLine("Step 3");
});
}