Dans quels scénarios voudrait-on utiliser
public async Task AsyncMethod(int num)
au lieu de
public async void AsyncMethod(int num)
Le seul scénario auquel je peux penser est si vous avez besoin de la tâche pour pouvoir suivre sa progression.
De plus, dans la méthode suivante, les mots clés asynchrones et en attente sont-ils inutiles?
public static async void AsyncMethod2(int num)
{
await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Thread.Sleep
avec vos tâches, vous devriez await Task.Delay(num)
plutôt
Task.Delay
n'est pas le cas, Task.AsyncDelay
car toutes les méthodes de la tâche sont Async
async void
place async Task
. La méthode s'est bloquée car elle utilisait un objet de contexte Entity Framework déclaré en tant que membre du contrôleur a été supprimé avant la fin de l'exécution de la méthode. L'infrastructure a disposé le contrôleur avant que sa méthode ne soit exécutée. J'ai changé la méthode en tâche asynchrone et cela a fonctionné.
Foo()
deviendraitFooAsync()
.