Disseram-me recentemente que a forma como eu estava usando meu .ContinueWith for Tasks não era a maneira correta de usá-los. Ainda não encontrei evidências disso na internet, então vou perguntar a vocês e ver qual é a resposta. Aqui está um exemplo de como eu 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");
});
}
Agora eu sei que este é um exemplo simples e será executado muito rápido, mas apenas suponha que cada tarefa execute uma operação mais longa. Então, o que me disseram é que no .ContinueWith, você precisa dizer prevTask.Wait (); caso contrário, você pode trabalhar antes que a tarefa anterior termine. É mesmo possível? Presumi que minha segunda e terceira tarefas só seriam executadas quando a tarefa anterior terminasse.
O que me disseram como escrever o 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");
});
}