Heim > Backend-Entwicklung > C++ > Wie behandelt man Ausnahmen von separaten Threads in .NET effektiv?

Wie behandelt man Ausnahmen von separaten Threads in .NET effektiv?

Patricia Arquette
Freigeben: 2025-01-05 17:29:40
Original
430 Leute haben es durchsucht

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

So behandeln Sie Ausnahmen, die in separaten Threads ausgelöst werden

In Multithread-Anwendungen ist es wichtig, Ausnahmen zu behandeln, die in anderen Threads als auftreten derjenige, der den Hauptcode ausführt. Diese Herausforderung erfordert eine sorgfältige Handhabung, um eine ordnungsgemäße Fehlerbehandlung und Anwendungsstabilität sicherzustellen.

Mit Task in .NET 4 und höher

Seit .NET 4 ist die Aufgabe Die Klasse bietet eine elegante Möglichkeit, Ausnahmen von separaten Threads zu erfassen. Nach dem Erstellen einer Aufgabe mit Task Wenn Sie es starten, können Sie die Eigenschaft „.Exceptions“ des Aufgabenobjekts verwenden, um alle ausgelösten Ausnahmen abzurufen. Es gibt zwei Ansätze zur Verarbeitung dieser Ausnahmen:

  1. In einer separaten Methode: Erstellen Sie mit ContinueWith() eine Rückrufmethode, die die Ausnahme asynchron im Thread der Aufgabe behandelt.
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

private void ExceptionHandler(Task<int> task)
{
    var exception = task.Exception;
    Console.WriteLine(exception);
}
Nach dem Login kopieren
  1. In der gleichen Methode: Behandeln Sie die Ausnahme im Thread des Aufrufers durch Abfangen der von Wait() ausgelösten AggregateException.
try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);    
}
Nach dem Login kopieren

Verwenden von Threads in .NET 3.5

In .NET 3.5, wo Task< T> nicht verfügbar ist, können Sie Ausnahmen von Threads mit den folgenden Ansätzen behandeln:

  1. Übergeben einer Handler-Aktion: Erstellen Sie eine Delegate-Aktion zur Behandlung von Ausnahmen und übergeben Sie sie an den Thread. Der Thread ruft die Aktion auf, wenn eine Ausnahme auftritt.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), Handler));
thread.Start();

private void Handler(Exception exception)
{        
    Console.WriteLine(exception);
}
Nach dem Login kopieren
  1. Verwenden eines Out-Parameters: Ändern Sie die SafeExecute()-Methode, um einen Out-Parameter für zu übernehmen Ausnahme. Der Thread legt den Parameter fest, wenn eine Ausnahme auftritt.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), out exception));
thread.Start();

...

Console.WriteLine(exception);
Nach dem Login kopieren

Durch die Implementierung dieser Techniken können Sie Ausnahmen, die in verschiedenen Threads ausgelöst werden, effektiv behandeln und so sicherstellen, dass Ihre Anwendung auch bei Anwesenheit weiterhin zuverlässig funktioniert von unerwarteten Fehlern.

Das obige ist der detaillierte Inhalt vonWie behandelt man Ausnahmen von separaten Threads in .NET effektiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage