Aller au contenu

Les exceptions ne peuvent pas être capturées

Contexte : Les exceptions levées par une méthode async void ne peuvent pas être capturées par l’appelant ; elles font planter le processus ou terminer l’application.

using System;
using System.Threading.Tasks;
public class BadExample
{
public static void Main()
{
try
{
BadAsyncVoid();
}
catch (Exception)
{
Console.WriteLine("Ceci ne sera jamais exécuté");
}
Console.ReadLine(); // le processus peut planter avant
}
static async void BadAsyncVoid()
{
throw new InvalidOperationException("Crash");
}
}

Retournez Task au lieu de void.

async Task GoodAsync()
{
throw new InvalidOperationException("Sera capturée");
}

À éviter dans le code de bibliothèque : N’exposez jamais async void dans une API publique. Utilisez async void uniquement pour les gestionnaires d’événements UI où le framework gère les exceptions.

Exemple : Recommandations async – éviter async void