Middle
Kaip su await sugauti išimtis kode?
sobes.tech AI
Atsakymas iš AI
Klaidų, naudojant await kodą, gaudymas vyksta per standartinius try...catch blokus.
Pavyzdys:
public async Task GetDataAsync()
{
try
{
// Asinchroninės operacijos iškvietimas, kuri gali sukelti išimtį
var result = await SomeService.FetchDataFromApiAsync();
// Sėkmingo rezultato apdorojimas
}
catch (UnauthorizedAccessException ex)
{
// Konkretus išimties apdorojimas (pvz., trūksta teisių)
Console.WriteLine($"Autorizacijos klaida: {ex.Message}");
}
catch (HttpRequestException ex)
{
// HTTP užklausos išimties apdorojimas (pvz., tinklo problemos)
Console.WriteLine($"HTTP užklausos klaida: {ex.Message}");
}
catch (Exception ex)
{
// Visų kitų neapdorotų išimčių apdorojimas
Console.WriteLine($"Nenumatyta klaida: {ex.Message}");
}
}
Jei asinchroninė operacija, nurodyta await, išmeta išimtį, tiesioginis kodo vykdymas yra nutraukiamas, ir valdymas perduodamas atitinkamam catch blokui toje pačioje asinchroninėje funkcijoje (arba ją kviečiančioje). Be await, išimtis iš asinchroninės operacijos nebus sugauta kviečiančioje funkcijoje iki tol, kol užduotis/operacija nebus baigta ir jos rezultatas/išimtis nebus prašoma (pvz., per .Result ar .Wait(), kas nerekomenduojama). await iš esmės "išskleidžia" išimtį iš užduoties ir ją pakartotinai meta, leidžiant ją įprastai sugauti naudojant try...catch.