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 билан ўтказиш имконини беради.