O que acontece se eu não esperar uma tarefa?
Considere este exemplo:
var task = DoSomething()
bool ready = await DoSomethingElse();
if (!ready)
return null;
var value = await DoThirdThing(); // depends on DoSomethingElse
return value + await task;
DoSomething
faz algum trabalho muito importante que pode demorar um pouco, então começamos primeiro.
Enquanto isso, verificamos se estamos prontos paraDoSomethingElse
e saia mais cedo, se não estiver.
Nós chamamosDoThirdThing
só se nós somosready
, como o universo poderia explodir.
Não podemos usarTask.WhenAll
ComoDoThirdThing
depende deDoSomethingElse
e também não queremos esperarDoSomething
porque queremos chamar os outros dois métodos simultaneamente, se possível.
A questão: O que acontece comtask
se não estamosready
e sair cedo?
Quaisquer exceções lançadas serão relançadas por umSynchronizationContext
?
Existem problemas setask
termina normalmente, como ninguém consome seu valor?
Acompanhamento: Existe uma maneira legal de garantirtask
está aguardado?
Nós poderíamos simplesmenteawait task
se não estamosready
no entanto, se houvesse 50 condições de saída, isso seria muito tedioso.
Poderia umfinally
bloco ser usado paraawait task
e relançar possíveis exceções? E setask
concluído normalmente, seria novamente aguardado nofinally
bloco, mas isso não deve causar problemas?