Rumah >pembangunan bahagian belakang >C++ >Bagaimana Berkesan Mengendalikan Pengecualian dalam Tugasan Async C#?
Teknik Pengendalian Pengecualian dalam Tugasan
Dalam bidang pengaturcaraan tak segerak, System.Threading.Tasks.Task
Pilihan 1: Async dan Await (C# 5.0 dan ke atas)
Dengan kemunculan C# 5.0, async dan kata kunci tunggu menyediakan kaedah yang lebih bersih dan diperkemas untuk pengendalian pengecualian. Anda boleh memintas ContinueWith dan menulis kod anda secara berurutan, menggunakan blok try/catch untuk menangkap pengecualian, seperti yang digambarkan di bawah:
try { await task; } catch (Exception e) { // Handle exceptions }
Pilihan 2: ContinueWith Overload (C# 4.0 dan ke bawah)
Dalam versi C# yang lebih awal, anda boleh menggunakan pendekatan alternatif menggunakan lebihan ContinueWith yang menerima parameter jenis TaskContinuationOptions. Ini membolehkan kawalan terperinci ke atas kesinambungan yang harus dilaksanakan berdasarkan keadaan tugas anteseden. Untuk mengendalikan pengecualian secara khusus, gunakan pilihan OnlyOnFaulted:
task.ContinueWith(t => { /* Handle exceptions */ }, context, TaskContinuationOptions.OnlyOnFaulted);
Contoh Pelaksanaan
Dalam contoh yang anda berikan, anda boleh mempertimbangkan untuk menstruktur semula kod menggunakan ContinueWith seperti berikut:
public class ChildClass : BaseClass { public void DoItInAThread() { var context = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew<StateObject>(() => this.Action()) .ContinueWith(e => this.ContinuedAction(e), context) .ContinueWith(t => HandleExceptions(t), context, TaskContinuationOptions.OnlyOnFaulted); } private void ContinuedAction(Task<StateObject> e) { if (e.IsFaulted) { return; // Skip execution if faulted } // Perform action with e.Result } private void HandleExceptions(Task task) { // Display error window and log the error } }
Dengan memanfaatkan teknik ini, anda boleh memastikan pengendalian pengecualian dalam operasi Tugas anda, mengekalkan asas kod yang bersih dan berstruktur.
Atas ialah kandungan terperinci Bagaimana Berkesan Mengendalikan Pengecualian dalam Tugasan Async C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!