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
Lepaskan: 2025-01-05 06:54:39
asal
607 orang telah melayarinya

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

try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);
}
Salin selepas log masuk

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);
Salin selepas log masuk
  • 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);
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan