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-ով։