Heim >Backend-Entwicklung >C++ >Wie fängt man Ausnahmen von separaten Threads in .NET ab?

Wie fängt man Ausnahmen von separaten Threads in .NET ab?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 06:54:39561Durchsuche

How to Catch Exceptions from Separate Threads in .NET?

In einem separaten Thread ausgelöste Ausnahmen abfangen

In Multithread-Anwendungen ist es wichtig, Ausnahmen zu behandeln, die in separaten Threads auftreten. In diesem Leitfaden werden zwei Ansätze gezeigt, um dies zu erreichen.

Aufgabenbasierte Ausnahmebehandlung in .NET 4 und höher

Erwägen Sie die Verwendung von Task anstatt neue Threads zu erstellen. Mit Task können Ausnahmen über die Eigenschaft .Exceptions abgerufen werden. Hier sind zwei Möglichkeiten, dies zu tun:

  • In einer separaten Methode:
Task<int> task = new Task<int>(Test);
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);
task.Start();
...

static void ExceptionHandler(Task<int> task)
{
    Console.WriteLine(task.Exception.Message);
}
  • In derselben Methode :
Task<int> task = new Task<int>(Test);
task.Start();

try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);
}

Ausnahmebehandlung in .NET 3.5

Berücksichtigen Sie für .NET 3.5 die folgenden Ansätze:

  • Im Kinderthread:
Exception exception = null;
Thread thread = new Thread(() => Test(0, 0));
thread.Start();

thread.Join();

if (exception != null)
    Console.WriteLine(exception);
  • Im Caller's Thread:
Exception exception = null;
Thread thread = new Thread(() =>
{
    try
    {
        Test(0, 0);
    }
    catch (Exception ex)
    {
        lock (exceptionLock)
        {
            exception = ex;
        }
    }
});
thread.Start();
thread.Join();

if (exception != null)
    Console.WriteLine(exception);

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

Stellungnahme:
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