C# の async void メソッドによってスローされた例外をキャッチするにはどうすればよいですか?

WBOY
リリース: 2023-08-31 12:53:02
転載
1518 人が閲覧しました

如何捕获 C# 中 async void 方法抛出的异常?

同期 C# コードでは、例外は、例外を処理できる適切な catch ブロックに到達するまで、コール スタックを上に伝播します。ただし、非同期メソッドでの例外処理はそれほど単純ではありません。

C# の非同期メソッドは、void、Task、Task の 3 種類の戻り値を持つことができます。戻り値の型が Task または Task である非同期メソッドで例外が発生すると、例外オブジェクトは AggregateException インスタンスにラップされ、Task オブジェクトにアタッチされます。

複数の例外がスローされた場合、すべての例外がスローされます。これらは Task オブジェクトに保存されます。

例 1

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 サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート