Sobes.tech
Middle

Чӣ гуна метавон хатогиҳоро дар код бо истифода аз await дастгирӣ кард?

sobes.tech AI

Ҷавоб аз AI

Ҳамёнда await ишлатилган кодда чиқишлар стандарт try...catch блоклари билан ёпилади.

Масалан:

public async Task GetDataAsync()
{
    try
    {
        // Хатолик келтириши мумкин бўлган асинхрон амалиётни чақириш
        var result = await SomeService.FetchDataFromApiAsync();
        // Муваффақиятли натижани қайта ишлаш
    }
    catch (UnauthorizedAccessException ex)
    {
        // Махсус чиқишни қайта ишлаш (масалан, ҳуқуқлар йўқлиги)
        Console.WriteLine($"Авторизация хато: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // HTTP сўров чиқишини қайта ишлаш (масалан, тармоқ муаммолари)
        Console.WriteLine($"HTTP сўров хато: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Бошқа барча назорат қилинмаган чиқишларни қайта ишлаш
        Console.WriteLine($"Кутилмаган хато юз берди: {ex.Message}");
    }
}

Агар await билан кўрсатилган асинхрон амалиёт чиқиш берса, тўғридан-тўғри код оқими тўхтайди ва назорат тегишли catch блокига ўтади, шунингдек, у бир хил асинхрон функцияда (ёки уни чақирган) бўлади. awaitсиз, асинхрон амалиётдан чиқиш функцияси томонидан ўлжаланмайди, то қадар ишончли натижа/чиқиш сўралмаса (масалан, .Result ёки .Wait() орқали, бу тавсия этилмайди). await ҳақиқатан ҳам чиқишни "қайтариб" олади ва яна юбориб, уни одатда try...catch билан ўтказиш имконини беради.