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