Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Tugasan C# dengan Berkesan?
Dalam bidang pengaturcaraan tak segerak, mengurus pengecualian dengan berkesan adalah penting. Apabila bekerja dengan System.Threading.Tasks.Task
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!