Ich frage mich, wie ich in C# Ausnahmen von asynchronen Methoden abfangen sollte, die über das Schlüsselwort await
abgewartet werden. Betrachten Sie zum Beispiel das folgende kleine Konsolenprogramm, das vor allem eine Methode namens AwaitSync
enthält. AwaitSync
ruft TestAsync
auf, die einen Task zurückgibt, der bei Ausführung eine Ausnahme auslöst. Ich versuche, die Ausnahme in AwaitAsync
, zu fangen, aber es geht unbehandelt.Wie erhalte ich in C# eine Ausnahme von einer asynchronen Methode, die erwartet wird?
class Program
{
static void Main(string[] args)
{
AwaitAsync();
Console.ReadKey();
}
static async Task AwaitAsync()
{
try
{
await TestAsync();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}
}
static Task TestAsync()
{
return Task.Factory.StartNew(() => { throw new Exception("Test"); });
}
}
Wie soll ich über den Fang, die Ausnahme von der Aufgabe von TestAsync
zurück gehen soll? Während dieses Beispiel ein Konsolenprogramm ist, liegt mein Problem im wirklichen Leben im Kontext von ASP.NET MVC/Web API.
EDIT: aus Schaltet die Ausnahme gefangen wird immer aus technischen Gründen habe ich einfach nicht die ‚Exception gefangen‘ Meldung fest, bevor das Terminal geschlossen. In jedem Fall war Jon Skeets Antwort sehr wertvoll für mein Verständnis von await
und Exception Handling.
Sie sagen, dass das nicht funktioniert? – jishi
Wenn ich Ihren Code ausführen, sehe ich "Ausnahme gefangen". – spender
Es wird nicht für mich gefangen. Ich werde es noch einmal überprüfen. – aknuds1