Comment capturer des exceptions dans le code en utilisant await?
sobes.tech IA
Réponse de l'IA
Les exceptions dans le code utilisant await sont capturées par des blocs standard try...catch.
Exemple:
public async Task GetDataAsync()
{
try
{
// Appel d'une opération asynchrone pouvant générer une exception
var result = await SomeService.FetchDataFromApiAsync();
// Traitement du résultat réussi
}
catch (UnauthorizedAccessException ex)
{
// Gestion d'une exception spécifique (par exemple, absence de droits)
Console.WriteLine($"Erreur d'autorisation : {ex.Message}");
}
catch (HttpRequestException ex)
{
// Gestion d'une exception de requête HTTP (par exemple, problèmes réseau)
Console.WriteLine($"Erreur de requête HTTP : {ex.Message}");
}
catch (Exception ex)
{
// Gestion de toute autre exception non traitée
Console.WriteLine($"Une erreur inattendue est survenue : {ex.Message}");
// Actions supplémentaires : journalisation, notification de l'utilisateur, etc.
}
}
Si l'opération asynchrone pointée par await lance une exception, l'exécution du flux de code direct est interrompue, et le contrôle est transféré au bloc catch correspondant dans la même fonction asynchrone (ou celle qui l'appelle). Sans await, l'exception de l'opération asynchrone ne sera pas capturée par la fonction appelante jusqu'à ce que la tâche/l'opération soit terminée et que son résultat/exception soit demandé (par exemple, via .Result ou .Wait(), ce qui n'est pas recommandé). await "déroule" en fait l'exception de la tâche et la relance, rendant la capture avec try...catch possible de manière habituelle.