Chamar Task.Wait () imediatamente após uma operação assíncrona é equivalente a executar a mesma operação de forma síncrona?
Em outras palavras, é
var task = SomeLongRunningOperationAsync();
task.Wait();
funcionalmente idêntico a
SomeLongRunningOperation();
Em outras palavras, é
var task = SomeOtherLongRunningOperationAsync();
var result = task.Result;
funcionalmente idêntico a
var result = SomeOtherLongRunningOperation();
De acordo comTask.Wait e Inlining, se a tarefa que está sendoWait
Já começou a execução,Wait
tem que bloquear. No entanto, se ele não começou a executar,Wait
poderá extrair a tarefa de destino do agendador no qual estava na fila e executá-la em linha no encadeamento atual.
Esses dois casos são apenas uma questão de decidir em qual thread a Tarefa será executada e, se você espera o resultado de qualquer maneira, isso importa?
Existe algum benefício em usar o formulário assíncrono sobre o formulário síncrono, se nada for executado entre a chamada assíncrona e oWait()
?