Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Kaedah Async 'Fire and Forget'?

Bagaimanakah Saya Boleh Mengendalikan Pengecualian dalam Kaedah Async 'Fire and Forget'?

DDD
DDDasal
2024-12-29 05:34:14788semak imbas

How Can I Handle Exceptions in a

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!

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