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
Patricia Arquetteoriginal
2025-01-05 17:29:40410parcourir

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);
}
  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);    
}

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);
}
  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);

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!

Déclaration:
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