Sobes.tech
Middle

Hogyan lehet a kódban az await segítségével kivételeket elkapni?

sobes.tech MI

Válasz az MI-től

Az await-et használó kódban keletkező kivételeket a szokásos try...catch blokkokkal lehet elkapni.

Példa:

public async Task GetDataAsync()
{
    try
    {
        // Aszinkron művelet hívása, amely kivételt okozhat
        var result = await SomeService.FetchDataFromApiAsync();
        // Sikeres eredmény feldolgozása
    }
    catch (UnauthorizedAccessException ex)
    {
        // Specifikus kivétel kezelése (pl. jogosultság hiánya)
        Console.WriteLine($"Engedélyhiba: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // HTTP kérés kivétel kezelése (pl. hálózati problémák)
        Console.WriteLine($"HTTP kérés hiba: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Bármilyen más nem kezelt kivétel kezelése
        Console.WriteLine($"Váratlan hiba történt: {ex.Message}");
    }
}

Ha az await-tel jelölt aszinkron művelet kivételt dob, a közvetlen kód végrehajtása megszakad, és a vezérlés átkerül a megfelelő catch blokkba ugyanabban a aszinkron függvényben (vagy a hívóban). await nélkül a kivétel nem lesz elfogva a hívó függvény által, amíg a feladat/művelet nem fejeződik be, és az eredmény/kivétel nem kérhető (pl. .Result vagy .Wait(), amit nem javasolt). Az await valójában "kibontja" a kivételt a feladatból és újra dobja, lehetővé téve a szokásos try...catch-tel való elfogást.