Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Kaedah Async 'Fire and Forget'?
Api dan Lupakan dengan Penyebaran Pengecualian Terjamin
Dalam pendekatan "Fire and Forget", kaedah digunakan tanpa menunggu selesai atau mengendalikan hasilnya. Walau bagaimanapun, apabila kaedah mengembalikan tugasan, ia bukanlah "Fire and Forget". Pengecualian yang dilemparkan dalam tugasan tidak disebarkan ke konteks panggilan.
Untuk memastikan pengecualian dalam kaedah "Fire and Forget" dikendalikan atau ditingkatkan, disyorkan untuk mengubah suai kaedah sambungan seperti berikut:
public static async void Forget(this Task task) { await task; }
Dengan menunggu tugasan, sebarang pengecualian yang dilemparkan dalam tugasan akan disebarkan ke konteks panggilan dan dikendalikan atau ditingkatkan sewajarnya.
Mengendalikan Pengecualian Jangkaan dalam Kaedah "Fire and Forget"
Soalan asal menimbulkan kebimbangan mengenai kaedah yang mungkin membuang pengecualian yang dijangka dan tidak dapat dielakkan dalam "Kebakaran dan Lupakan konteks". Untuk menangani perkara ini, kaedah sambungan boleh diubah suai untuk menerima senarai jenis pengecualian yang boleh diterima:
public static async void Forget(this Task task, params Type[] acceptableExceptions) { try { await task.ConfigureAwait(false); } catch (Exception ex) { // TODO: consider whether derived types are also acceptable. if (!acceptableExceptions.Contains(ex.GetType())) throw; } }
Ini membolehkan pemanggil untuk menentukan jenis pengecualian yang harus diabaikan dan yang perlu ditingkatkan, memberikan kawalan yang lebih besar terhadap tingkah laku pengendalian pengecualian dalam kaedah "Fire and Forget".
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Kaedah Async 'Fire and Forget'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!