Aller au contenu

void uniquement pour les gestionnaires d’événements (à éviter)

Contexte : async void ne devrait être utilisé que pour les gestionnaires d’événements. Pour toutes les autres méthodes asynchrones, retournez Task ou Task<T>.

using System;
using System.Threading.Tasks;
using System.Windows.Forms; // Exemple WinForms
public partial class MyForm : Form
{
// Acceptable : gestionnaire d’événement
private async void Button_Click(object sender, EventArgs e)
{
await LoadDataAsync();
}
private async Task LoadDataAsync()
{
await Task.Delay(100);
}
}
  • Les exceptions ne peuvent pas être capturées par l’appelant ; elles font planter le processus.
  • Difficile à tester (pas de tâche à attendre).
  • L’appelant ne peut pas savoir quand la méthode se termine.

Gestionnaires d’événements UI : WPF, WinForms et Blazor autorisent async void pour les événements car le framework gère l’exception.

Exemple : Pièges de async void