Sobes.tech
Middle

Wie kann man mit await Ausnahmen im Code abfangen?

sobes.tech KI

Antwort von AI

Ausnahmen im Code, der await verwendet, werden durch standardmäßige try...catch-Blöcke abgefangen.

Beispiel:

public async Task GetDataAsync()
{
    try
    {
        // Aufruf einer asynchronen Operation, die eine Ausnahme erzeugen kann
        var result = await SomeService.FetchDataFromApiAsync();
        // Verarbeitung des erfolgreichen Ergebnisses
    }
    catch (UnauthorizedAccessException ex)
    {
        // Behandlung einer spezifischen Ausnahme (z.B. fehlende Rechte)
        Console.WriteLine($"Autorisierungsfehler: {ex.Message}");
    }
    catch (HttpRequestException ex)
    {
        // Behandlung einer HTTP-Anfrage-Ausnahme (z.B. Netzwerkprobleme)
        Console.WriteLine($"HTTP-Anfragefehler: {ex.Message}");
    }
    catch (Exception ex)
    {
        // Behandlung aller anderen unbehandelten Ausnahmen
        Console.WriteLine($"Unerwarteter Fehler: {ex.Message}");
    }
}

Wenn die asynchrone Operation, auf die await zeigt, eine Ausnahme auslöst, wird die Ausführung des direkten Codeflusses unterbrochen, und die Kontrolle wird an den entsprechenden catch-Block in derselben asynchronen Funktion (oder der aufrufenden Funktion) übergeben. Ohne await wird die Ausnahme der asynchronen Operation vom aufrufenden Code nicht abgefangen, bis die Aufgabe/Operation abgeschlossen ist und ihr Ergebnis/Fehler abgefragt wird (z.B. durch .Result oder .Wait(), was nicht empfohlen wird). await "entrollt" die Ausnahme aus der Aufgabe und wirft sie erneut, was das Abfangen mit try...catch auf übliche Weise ermöglicht.