Middle
Kā ar await noķert izņēmumus kodā?
sobes.tech AI
Atbilde no AI
Izņēmumi kodā, izmantojot await, tiek noķerti ar standarta try...catch blokiem.
Piemērs:
public async Task GetDataAsync()
{
try
{
// Asinhronas operācijas izsaukums, kas var radīt izņēmumu
var result = await SomeService.FetchDataFromApiAsync();
// Veiksmīgas rezultāta apstrāde
}
catch (UnauthorizedAccessException ex)
{
// Konkrēta izņēmuma apstrāde (piemēram, piekļuves tiesību trūkums)
Console.WriteLine($"Autorizācijas kļūda: {ex.Message}");
}
catch (HttpRequestException ex)
{
// HTTP pieprasījuma izņēmuma apstrāde (piemēram, tīkla problēmas)
Console.WriteLine($"HTTP pieprasījuma kļūda: {ex.Message}");
}
catch (Exception ex)
{
// Visu citu neapstrādāto izņēmumu apstrāde
Console.WriteLine($"Notikusi neparedzēta kļūda: {ex.Message}");
// Papildu darbības: žurnālu veidošana, lietotāja brīdinājums utt.
}
}
Ja asinhronā operācija, uz kuru norāda await, izmet izņēmumu, tieši koda plūsma tiek pārtraukta, un vadība tiek nodota atbilstošajam catch blokam tajā pašā asinhronajā funkcijā (vai izsaucējs). Bez await izņēmums no asinhronās operācijas netiks noķerts izsaucējas funkcijas līdz brīdim, kad uzdevums/operācija tiks pabeigta un tās rezultāts/izņēmums tiks pieprasīts (piemēram, caur .Result vai .Wait(), kas nav ieteicams). await faktiski "atver" izņēmumu no uzdevuma un pārmet to, padarot try...catch noķeršanu par ierastu veidu.