Maison > développement back-end > C++ > Comment gérer efficacement les exceptions provenant de threads distincts dans .NET ?

Comment gérer efficacement les exceptions provenant de threads distincts dans .NET ?

Patricia Arquette
Libérer: 2025-01-05 17:29:40
original
365 Les gens l'ont consulté

How to Effectively Handle Exceptions from Separate Threads in .NET?

Comment gérer les exceptions levées dans des threads séparés

Dans les applications multithread, il devient crucial de gérer les exceptions qui se produisent dans des threads autres que celui qui exécute le code principal. Ce défi nécessite une gestion minutieuse pour garantir une gestion appropriée des erreurs et la stabilité de l'application.

L'utilisation de Task dans .NET 4 et supérieur

Depuis .NET 4, la tâche class offre un moyen élégant de capturer les exceptions de threads distincts. Après avoir créé une tâche avec Task et en le démarrant, vous pouvez utiliser la propriété .Exceptions sur l'objet tâche pour récupérer toutes les exceptions levées. Il existe deux approches pour traiter ces exceptions :

  1. Dans une méthode séparée : Créez une méthode de rappel à l'aide de ContinueWith() qui gère l'exception de manière asynchrone dans le thread de la tâche.
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

private void ExceptionHandler(Task<int> task)
{
    var exception = task.Exception;
    Console.WriteLine(exception);
}
Copier après la connexion
  1. Dans la même méthode : Gérez l'exception dans le le fil de l'appelant en interceptant l'AggregateException levée par Wait().
try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);    
}
Copier après la connexion

Utilisation de Threads dans .NET 3.5

Dans .NET 3.5, où Task< T> n'est pas disponible, vous pouvez gérer les exceptions des threads en utilisant les approches suivantes :

  1. Passer une action de gestionnaire : Créez une action de délégué pour gérer les exceptions et transmettez-la au thread. Le thread invoquera l'action lorsqu'une exception se produit.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), Handler));
thread.Start();

private void Handler(Exception exception)
{        
    Console.WriteLine(exception);
}
Copier après la connexion
  1. Utilisation d'un paramètre Out : Modifiez la méthode SafeExecute() pour prendre un paramètre out pour le exception. Le thread définira le paramètre lorsqu'une exception se produit.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), out exception));
thread.Start();

...

Console.WriteLine(exception);
Copier après la connexion

En implémentant ces techniques, vous pouvez gérer efficacement les exceptions lancées dans différents threads, garantissant que votre application continue de fonctionner de manière fiable même en présence d'erreurs inattendues.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal