Im synchronen C#-Code breitet sich eine Ausnahme im Aufrufstapel nach oben aus, bis sie einen geeigneten Catch-Block erreicht, der die Ausnahme verarbeiten kann. Allerdings ist die Ausnahmebehandlung in asynchronen Methoden nicht so einfach.
Asynchrone Methoden in C# können drei Arten von Rückgabewerten haben: void, Task und Task. Wenn eine Ausnahme in einer asynchronen Methode mit dem Rückgabetyp Task oder Task auftritt, wird das Ausnahmeobjekt in eine AggregateException-Instanz eingeschlossen und an das Task-Objekt angehängt.
Wenn mehrere Ausnahmen ausgelöst werden, werden alle Ausnahmen ausgelöst. Sie werden in Task-Objekten gespeichert.
static async Task Main(string[] args) { await DoSomething(); Console.ReadLine(); } public static async Task Foo() { throw new ArgumentNullException(); } public static async Task DoSomething(){ try{ await Foo(); } catch (ArgumentNullException ex){ Console.WriteLine(ex); } }
System.ArgumentNullException: Value cannot be null. at DemoApplication.Program.Foo() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 37 at DemoApplication.Program.DoSomething() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 44
Das obige ist der detaillierte Inhalt vonWie fängt man Ausnahmen ab, die von asynchronen Void-Methoden in C# ausgelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!