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 estamosreadyno 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?

questionAnswers(0)

yourAnswerToTheQuestion