同期 C# コードでは、例外は、例外を処理できる適切な catch ブロックに到達するまで、コール スタックを上に伝播します。ただし、非同期メソッドでの例外処理はそれほど単純ではありません。
C# の非同期メソッドは、void、Task、Task の 3 種類の戻り値を持つことができます。戻り値の型が Task または Task である非同期メソッドで例外が発生すると、例外オブジェクトは AggregateException インスタンスにラップされ、Task オブジェクトにアタッチされます。
複数の例外がスローされた場合、すべての例外がスローされます。これらは Task オブジェクトに保存されます。
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
以上がC# の async void メソッドによってスローされた例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。