Sobes.tech
Middle

Kodni yozishda await yordamida qanday qilib xatoliklarni ushlash mumkin?

sobes.tech AI

AIdan javob

await bilan kodda yuzaga keladigan istisnolar standart try...catch bloklari bilan ushlanadi.

Misol:

public async Task GetDataAsync()
{
    try
    {
        // Xatolik keltirib chiqarishi mumkin bo'lgan asinxron operatsiya chaqiruvi
        var result = await SomeService.FetchDataFromApiAsync();
        // Muvaffaqiyatli natijani qayta ishlash
    }
    catch (UnauthorizedAccessException ex)
    {
        // Maxsus istisnani boshqarish (masalan, huquq yetishmasligi)
        Console.WriteLine($"Autorizatsiya xatosi: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // HTTP so'rov istisnosini boshqarish (masalan, tarmoq muammolari)
        Console.WriteLine($"HTTP so'rov xatosi: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Boshqa barcha nazorat qilinmagan istisnalarni boshqarish
        Console.WriteLine($"Kutilmagan xato yuz berdi: {ex.Message}");
    }
}

Agar await bilan ko'rsatilgan asinxron operatsiya istisno chiqaradigan bo'lsa, to'g'ridan-to'g'ri kod oqimi to'xtatiladi va nazorat mos catch blokiga o'tadi, ayniqsa, u bir xil asinxron funktsiyada (yoki uni chaqiradigan) bo'lsa. awaitsiz, asinxron operatsiyaning istisnosi chaqiruvchi funktsiya tomonidan ushlanmaydi, to'g'ri natija/istisno so'ralguncha (masalan, .Result yoki .Wait() yordamida, bu tavsiya etilmaydi) kutib turadi. await aslida vazifaning ichidagi istisnoni "ochib" tashlaydi va uni qayta yuboradi, shuning uchun try...catch yordamida odatiy tarzda ushlash mumkin bo'ladi.