プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/02/27

[C#] AggregateException

event_note2019/02/26 23:56

非同期処理を行っているときに、AggregateException というよくわからない例外が発生しました。

これについて以下のページで詳しく解説されていました。

非同期処理、並列処理を行っている場合、例外が同時に発生する可能性があるため、タスク内で発生した例外は AggregateException に集約され、その中の InnerException に実際に発生した例外が格納されるようです。
そして、その AggregateExceptionWaitResult を呼び出したときに投げられるようです。
await を使っている場合は発生した例外をそのままキャッチできます。

まとめると以下のような感じです。

  • await している場合は発生した例外をそのままキャッチできる
  • WaitResult を使っている場合は AggregateException が発生し、その中の InnerException に実際に発生した例外が格納されている
  • awaitWait Result もしない場合、タスク内で発生した例外はキャッチできない