Je sais qu'il est généralement considéré comme une mauvaise idée d'utiliser des méthodes async void
de feu et d'oublier pour démarrer des tâches, car il n'y a pas de suivi de la tâche en attente et il est délicat de gérer les exceptions qui pourraient être levées à l'intérieur d'une telle méthode.
Devrais-je généralement éviter les gestionnaires d'événements async void
, également? Par exemple,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // faire un travail asynchrone
// ...
}
Je peux le réécrire comme ceci:
Tâche onFormLoadTask = null; // suivre la tâche, peut implémenter l'annulation
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); // faire un travail asynchrone
// ...
}
Quels sont les risques cachés pour les gestionnaires d'événements asynchrones, à part la possible réentrance?