Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Tugasan C# dengan Berkesan?

Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Tugasan C# dengan Berkesan?

Barbara Streisand
Barbara Streisandasal
2024-12-29 02:21:10534semak imbas

How Can I Effectively Handle Exceptions in C# Tasks?

Pengendalian Pengecualian dalam Tugas: Mendedahkan Pendekatan Optimum

Dalam bidang pengaturcaraan tak segerak, mengurus pengecualian dengan berkesan adalah penting. Apabila bekerja dengan System.Threading.Tasks.Task, kami memerlukan strategi yang mantap untuk mengendalikan kemungkinan pengecualian.

C# 5.0 dan Ke Atas: Async dan Await to the Rescue

Memperkenalkan async revolusioner dan menunggu kata kunci, C# 5.0 dan kemudian menawarkan penyelesaian yang dipermudahkan untuk pengendalian pengecualian. Kata kunci ini membolehkan anda menulis kod secara linear manakala pengkompil menterjemahkannya untuk menggunakan tugasan dan corak pengaturcaraan tak segerak.

Untuk menggunakan pendekatan ini, hanya bungkus kod anda dalam blok cuba-tangkap dalam kaedah yang ditetapkan dengan kata kunci async.

try
{
    // Start the task.
    var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

    // Await the task.
    await task;
}
catch (Exception e)
{
    // Perform cleanup here.
}

C# 4.0 dan Di Bawah: TaskContinuationOptions

Untuk versi C# yang lebih awal, kami boleh memanfaatkan kelebihan ContinueWith yang menerima parameter daripada penghitungan TaskContinuationOptions. Ini membolehkan kami menentukan syarat pelaksanaan untuk tugasan kesinambungan.

Secara khusus, menggunakan pilihan OnlyOnFaulted memastikan tugasan kesinambungan dilaksanakan hanya jika tugas anteseden memberikan pengecualian.

// Get the task.
var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context,
    TaskContinuationOptions.OnlyOnFaulted);

Mengendalikan Bukan Luar Biasa Kes

Untuk mengendalikan kes bukan luar biasa dalam C# 4.0 dan ke bawah, kami boleh mencipta beberapa tugasan ContinueWith untuk tugas anteseden yang sama. Sebagai contoh, kita boleh mempunyai tugas yang dilaksanakan apabila berjaya diselesaikan:

// Get the task.
var task = new Task<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context, 
    TaskContinuationOptions.OnlyOnFaulted);

// If it succeeded.
task.ContinueWith(t => { /* on success */ }, context,
    TaskContinuationOptions.OnlyOnRanToCompletion);

// Run task.
task.Start();

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Tugasan C# dengan Berkesan?. 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