1

MSDNによると:fireとforgetタスクから例外が発生するのは、呼び出しスレッドで発生しますか?

あなたは例外を伝播するタスク、またはアクセス その例外のプロパティで待機していない場合は、タスクがgarbage-ときに、例外が .NET例外ポリシーに応じてエスカレートされます集めました。 例外が結合スレッドにバブルアップすることを許可された場合、 例外が発生した後でタスクがいくつかのアイテムを処理し続ける可能性があります。

私は、タスククラスに例外を発生させるファイナライザがあると仮定しました。しかし、それでは、なぜ以下は無限に続くように見えるのですか?

long collectionCount = 0; 

Task.Factory.StartNew(() => { throw new NotImplementedException(); }); 

while (true) 
{ 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
    ++collectionCount; 
} 

答えて

2

.Net Framework 4.5、unobserved exceptions from Tasks no longer crash the process when they are finalized以降です。これはあなたのコードが.Net 4.5(またはそれ以降)で動作していることを意味していますので、新しいクラッシュのない動作が得られます。

+0

私はVisual Studio 2010を使用していますが、プロジェクトプロパティのターゲットフレームワークは.NET Framework 4 Client Profileに設定されています。 –

+0

それは問題ではありません。重要なことは、プログラムを実行するために実際にどのフレームワークが使用されるかです。 – svick

関連する問題