Dans le domaine de la programmation asynchrone, la gestion efficace des exceptions est cruciale. Lorsque nous travaillons avec System.Threading.Tasks.Task
C# 5.0 et versions ultérieures : Async et Await to the Rescue
Présentant les mots-clés révolutionnaires async et wait, C# 5.0 et versions ultérieures offrent une solution simplifiée pour la gestion des exceptions. Ces mots-clés vous permettent d'écrire du code de manière linéaire pendant que le compilateur le traduit pour utiliser des tâches et des modèles de programmation asynchrone.
Pour utiliser cette approche, enveloppez simplement votre code dans un bloc try-catch dans une méthode désignée par le mot clé async.
try { // Start the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // Await the task. await task; } catch (Exception e) { // Perform cleanup here. }
C# 4.0 et versions antérieures : TaskContinuationOptions
Pour les versions antérieures de C#, nous pouvons exploiter la surcharge ContinueWith qui accepte un paramètre de l'énumération TaskContinuationOptions. Cela nous permet de spécifier les conditions d'exécution de la tâche de continuation.
Plus précisément, l'utilisation de l'option OnlyOnFaulted garantit que la tâche de continuation ne s'exécute que si la tâche précédente a levé une exception.
// Get the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
Gestion des cas non exceptionnels
Pour gérer le cas non exceptionnel en C# 4.0 et ci-dessous, nous pouvons créer plusieurs tâches ContinueWith pour la même tâche antécédente. Par exemple, nous pourrions avoir une tâche qui s'exécute une fois terminée avec succès :
// Get the task. var task = new Task<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); // If it succeeded. task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); // Run task. task.Start();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!