Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menangkap Pengecualian daripada Benang Berasingan dalam .NET?

Bagaimana untuk Menangkap Pengecualian daripada Benang Berasingan dalam .NET?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 06:54:39595semak imbas

How to Catch Exceptions from Separate Threads in .NET?

Tangkap Pengecualian yang Dilemparkan dalam Benang Asing

Dalam aplikasi berbilang benang, adalah penting untuk mengendalikan pengecualian yang berlaku dalam urutan berasingan. Panduan ini akan menunjukkan dua pendekatan untuk mencapainya.

Pengendalian Pengecualian Berasaskan Tugas dalam .NET 4 dan Ke Atas

Pertimbangkan untuk menggunakan Task bukannya mencipta benang baharu. Dengan Tugas, pengecualian boleh diambil melalui sifat .Exceptions. Berikut ialah dua cara untuk melakukannya:

  • Dalam Kaedah Berasingan:
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);
}
  • Dalam Kaedah Yang Sama :
Task<int> task = new Task<int>(Test);
task.Start();

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

Pengendalian Pengecualian dalam .NET 3.5

Untuk .NET 3.5, pertimbangkan pendekatan berikut:

  • Dalam Thread Kanak-kanak:
Exception exception = null;
Thread thread = new Thread(() => Test(0, 0));
thread.Start();

thread.Join();

if (exception != null)
    Console.WriteLine(exception);
  • Di Pemanggil 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);

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Pengecualian daripada Benang Berasingan dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn