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"); }}Solution
Section intitulée « Solution »Retournez Task au lieu de void.
async Task GoodAsync(){ throw new InvalidOperationException("Sera capturée");}Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »À é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