3

.net 4.5 UnobservedTaskExceptionでわかっているように、アプリはクラッシュしません。

開発者がタスクに基づいて非同期コードを簡単に記述できるようにするために、.NET Framework 4.5 では監視されない例外の既定の例外動作が変更されています。監視されていない例外は依然として UnobservedTaskException 例外を発生させますが、デフォルトではプロセスは終了しません。代わりに、イベント ハンドラーが例外を監視するかどうかに関係なく、イベントの発生後にランタイムによって例外が処理されます。この動作は構成できます。.NET Framework 4.5 以降では、構成要素を使用して .NET Framework 4 の動作に戻し、プロセスを終了できます。

わかりました、Microsoft が例外を処理するマルチスレッドのエクスペリエンスを変更することを決定したと仮定しますが、なぜそれが tpl のみに適用されたのでしょうか? マルチスレッドメカニズムの他の部分が変更されなかったのはなぜですか? たとえば、次のコードでもアプリがクラッシュします

static void Main(string[] args)
{
    ThreadPool.QueueUserWorkItem(state => { throw new Exception(); });
    Console.ReadLine();
}

紛らわしく、非常に奇妙に見えます。これについて何か知っている人はいますか?

4

0 に答える 0