Sobes.tech
Middle

Hoe vang je uitzonderingen in de code met behulp van await?

sobes.tech AI

Antwoord van AI

De uitzonderingen in de code die await gebruiken, worden opgevangen door standaard try...catch-blokken.

Voorbeeld:

public async Task GetDataAsync()
{
    try
    {
        // Aanroep van een asynchrone operatie die een uitzondering kan genereren
        var result = await SomeService.FetchDataFromApiAsync();
        // Verwerking van het succesvolle resultaat
    }
    catch (UnauthorizedAccessException ex)
    {
        // Afhandeling van een specifieke uitzondering (bijvoorbeeld gebrek aan rechten)
        Console.WriteLine($"Autorisatiefout: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Afhandeling van een HTTP-verzoekfout (bijvoorbeeld netwerkproblemen)
        Console.WriteLine($"HTTP-verzoekfout: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Afhandeling van alle andere niet-afgehandelde uitzonderingen
        Console.WriteLine($"Er is een onverwachte fout opgetreden: {ex.Message}");
    }
}

Als de asynchrone operatie waarnaar await verwijst een uitzondering gooit, wordt de uitvoering van de directe code onderbroken en wordt de controle overgedragen aan het bijbehorende catch-blok in dezelfde asynchrone functie (of de aanroepende). Zonder await wordt de uitzondering van de asynchrone operatie niet opgevangen door de aanroepende functie totdat de taak/operatie is voltooid en het resultaat/de uitzondering wordt opgevraagd (bijvoorbeeld via .Result of .Wait(), wat niet wordt aanbevolen). await "ontrolt" in feite de uitzondering uit de taak en gooit deze opnieuw, waardoor het mogelijk is om deze op de gebruikelijke manier te vangen met try...catch.