ne peut pas attendre lambda asynchrone

De considérer cela,

Task task = new Task (async () =>{
    await TaskEx.Delay(1000);
});
task.Start();
task.Wait(); 

L'appel de la tâche.Wait() ne fait pas attendre l'achèvement de la tâche et la ligne suivante est exécutée immédiatement, mais si j'enveloppe la async expression lambda dans un appel de méthode, le code fonctionne comme prévu.

private static async Task AwaitableMethod()
{
    await TaskEx.Delay(1000);    
}

ensuite (mis à jour en fonction des commentaires de svick)

await AwaitableMethod(); 
  • Dans le AwaitableMethod vous sont effectivement de retour et en appelant à Attendre sur la tâche retourné à partir de la .Delay (), méthode (je suis en supposant qu'elle renvoie une Task). Dans le lambda asynchrone vous appelez à Attendre sur la Task task. Mais encore, je n'ai pas d'explication.
  • Vous devriez être très prudent sur le mélange await avec Wait(). Dans de nombreux cas, cela peut conduire à des blocages.
  • trouvé un grand exemple sur le mélange await avec Wait()
InformationsquelleAutor kennyzx | 2012-10-24