バックグラウンドタスクで発生した例外
- タスクの例外処理に関しては、.NET 4.5で大きな仕様変更が発生している。
- バックグラウンドタスクの完了を待機する(awaitキーワードやWaitメソッドを使う)場合には、バックグラウンドタスクで発生した例外が呼び出し元のスレッドに送られる。これには変更がない。
- バックグラウンドタスクの完了を待機しない場合には、次のように仕様が変わっている。
- .NET 4.0: トラップされなかった場合は、プログラムが終了する
- .NET 4.5: トラップされなかった場合は、その例外は失われる(既定値)
- この.NET 4.5の動作は、.NET 4.0と同じ動作をするように変更できる。App.configファイルでThrowUnobservedTaskExceptionsをtrueに設定する。
<!--バックグラウンドタスクで発生した例外を必ず受け取れるようにする設定 -->
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
参考にさせて頂いたページ