いくつかの記事やブログによると、次のようなコードは .NET 4 で例外を引き起こすはずです。
static void Main(string[] args)
{
Task.Factory.StartNew(() => { throw new Exception(); });
Thread.Sleep(1000);
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Completed");
}
予想される例外:
未処理の例外: System.AggregateException: タスクの待機中またはその Exception プロパティへのアクセスによって、タスクの例外が確認されませんでした。その結果、監視されていない例外がファイナライザー スレッドによって再スローされました。---> System.InvalidOperationException: オブジェクトの現在の状態のため、操作は有効ではありません。
しかし、そうではありません。PC 上の .NET 4 アプリケーションは .NET 4.5 のように動作します。
- デフォルトでは、その集計例外をスローしません
- 構成ファイルで次の設定を検出します。
< ThrowUnobservedTaskExceptions enabled="true"/>
.NET 4.5 と同じ動作を得るために、.NET 4 にパッチが適用されたようです。それは本当ですか、それとも設定に問題がありますか? または、4.5 がインストールされている場合、.NET4 アプリ (4.5 を対象としていない) はそのように動作しますか? 前もって感謝します。