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

Bagaimana Berkesan Mengendalikan Pengecualian daripada Benang Berasingan dalam .NET?

Patricia Arquette
Lepaskan: 2025-01-05 17:29:40
asal
365 orang telah melayarinya

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

Cara Mengendalikan Pengecualian yang Dilemparkan dalam Benang Asing

Dalam aplikasi berbilang benang, menjadi penting untuk mengendalikan pengecualian yang berlaku dalam utas selain daripada yang melaksanakan kod utama. Cabaran ini memerlukan pengendalian yang teliti untuk memastikan pengendalian ralat yang betul dan kestabilan aplikasi.

Menggunakan Tugas dalam .NET 4 dan Ke Atas

Sejak .NET 4, Tugas class menawarkan cara yang elegan untuk menangkap pengecualian daripada benang berasingan. Selepas membuat tugasan dengan Tugas dan memulakannya, anda boleh menggunakan sifat .Exceptions pada objek tugas untuk mendapatkan sebarang pengecualian yang dilemparkan. Terdapat dua pendekatan untuk memproses pengecualian ini:

  1. Dalam Kaedah Berasingan: Cipta kaedah panggil balik menggunakan ContinueWith() yang mengendalikan pengecualian secara tidak segerak dalam urutan tugasan.
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

private void ExceptionHandler(Task<int> task)
{
    var exception = task.Exception;
    Console.WriteLine(exception);
}
Salin selepas log masuk
  1. Dalam Yang Sama Kaedah: Kendalikan pengecualian dalam urutan pemanggil dengan menangkap AggregateException yang dilemparkan oleh Wait().
try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);    
}
Salin selepas log masuk

Menggunakan Thread dalam .NET 3.5

Dalam .NET 3.5, di mana Tugas tidak tersedia, anda boleh mengendalikan pengecualian daripada urutan menggunakan pendekatan berikut:

  1. Meluluskan Tindakan Pengendali: Buat tindakan perwakilan untuk mengendalikan pengecualian dan serahkannya kepada utas. Urutan akan menggunakan tindakan apabila pengecualian berlaku.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), Handler));
thread.Start();

private void Handler(Exception exception)
{        
    Console.WriteLine(exception);
}
Salin selepas log masuk
  1. Menggunakan Parameter Keluar: Ubah suai kaedah SafeExecute() untuk mengambil parameter keluar untuk pengecualian. Urutan akan menetapkan parameter apabila pengecualian berlaku.
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), out exception));
thread.Start();

...

Console.WriteLine(exception);
Salin selepas log masuk

Dengan melaksanakan teknik ini, anda boleh mengendalikan pengecualian yang dilemparkan dalam urutan yang berbeza dengan berkesan, memastikan aplikasi anda terus beroperasi dengan pasti walaupun di hadapan daripada ralat yang tidak dijangka.

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

sumber:php.cn
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