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-ით დაიჭიროს.