C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

非同期処理について質問です

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■103078 / inTopicNo.1)  非同期処理について質問です
  
□投稿者/ bun (1回)-(2024/04/19(Fri) 09:47:39)

分類:[C#] 

以下のようなメソッドがあるとき、
  public async Task Func()
  {
      // 実装省略
  }

呼び出し側で待機すれば、Func()メソッド内での例外をcatchできます。
  try
  {
      await Func();
  } catch(Exception) {
     // catchできる
  }

待機しない場合はcatchできなくなりますが、
  try
  {
      var task = Func();
  } catch(Exception) {
     // catchできない
  }

後から、例外が発生していたことを知る手立てはありますか?

引用返信 編集キー/
■103079 / inTopicNo.2)  Re[1]: 非同期処理について質問です
□投稿者/ Hongliang (1298回)-(2024/04/19(Fri) 09:53:11)
返値で受け取ったTaskオブジェクトに、一通りの値が格納されています。
例外情報はExceptiponプロパティに格納されますが、タスクが完了する(IsCompletedプロパティがtrueを返す)まで間はもちろん取得できません。
引用返信 編集キー/
■103081 / inTopicNo.3)  Re[2]: 非同期処理について質問です
□投稿者/ bun (2回)-(2024/04/19(Fri) 10:42:59)
なるほどです。
try catch はできないけど、Exceptiponプロパティ に同じだけの情報が格納される
わけですね。

ありがとうございました。

解決済み
引用返信 編集キー/
■103082 / inTopicNo.4)  Re[1]: 非同期処理について質問です
□投稿者/ WebSurfer (2896回)-(2024/04/19(Fri) 10:49:04)
No103078 (bun さん) に返信

> 後から、例外が発生していたことを知る手立てはありますか?

AppDomain.UnhandledException で補足できるかもしれません。

実装例は以下の記事の下の方の「集約的例外ハンドラによる例外処置の話」と
書いた以降を見てください。

デリゲートを利用した非同期メソッドの実装
http://surferonwww.info/BlogEngine/post/2019/06/19/coding-asynchronous-method-by-using-delegate-in-windows-forms-application.aspx

ただし、質問者さんのコード例は未検証・未確認ですので、補足できなかった
らすみません。
引用返信 編集キー/
■103083 / inTopicNo.5)  Re[2]: 非同期処理について質問です
□投稿者/ bun (3回)-(2024/04/19(Fri) 13:30:33)
確かに、最後の砦として、集約的例外ハンドラでも例外補足しておくのは良い気がします。

ありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ