5

いくつかの記事やブログによると、次のようなコードは .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 を対象としていない) はそのように動作しますか? 前もって感謝します。

4

1 に答える 1

7

私の推測では、あなたは実際に .NET 4.5 で実行していると思います。.NET 4.5 は .NET 4 の上に効果的にインストールされることに注意してください。アプリケーションが .NET 4 を対象としている場合でも、ユーザーが .NET 4.5 をインストールしていれば、新しい動作が得られます。

ユーザーが本当に .NET 4 しかインストールされていない可能性は十分にあります...

于 2013-11-13T17:31:14.767 に答える