Je sais qu'il est généralement considéré comme une mauvaise idée d'utiliser des méthodes d'incendie et d'oubli async void
pour démarrer des tâches, car il n'y a pas de trace de la tâche en attente et il est difficile de gérer les exceptions qui pourraient être lancées dans une telle méthode.
Dois-je généralement éviter les async void
gestionnaires d'événements? Par exemple,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Je peux le réécrire comme ceci:
Task onFormLoadTask = null; // track the task, can implement cancellation
private void Form_Load(object sender, System.EventArgs e)
{
this.onFormLoadTask = OnFormLoadTaskAsync(sender, e);
}
private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Quelles sont les roches sous-marines pour les gestionnaires d'événements asynchrones, en plus d'une éventuelle ré-entrée?