7

Taskを使用すると未処理の例外がどのように処理されるか知っています。なぜタイマスレッドの処理されない例外がプロセスをクラッシュさせないのですか

非同期スレッド(例:Action.BeginInvoke())の未処理の例外が、参加呼び出しでキャッチされ再スローされる(たとえば、Action.EndInvoke())も認識しています。

これはプロセスをクラッシュさせない方法ですが、わかりません。 .NET 4.0のドキュメントから

static void Main(string[] args) 
    { 
     var timer = new System.Timers.Timer() {Interval = 100}; 
     timer.Elapsed += (o, e) => { throw new Exception(); }; 
     timer.Start(); 

     Console.ReadKey(true); 
    } 
+0

これは私の人生の4〜6時間でした。私は戻ってこないでしょう。これがクラッシュしないようにするためのマイクロソフトの部分については、どんなに恐ろしい決断であろうか。 –

答えて

9

:.NET Frameworkのバージョン2.0およびそれ以前で

、Timerコンポーネント 漁獲量と Elapsedイベントのイベントハンドラによってスローされるすべての例外を抑制することができます。この現象は、.NET Frameworkの将来のリリース で変更される可能性があります。

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

まだこの動作が実際に変更されたことを主張一切文はありません。

+0

ああ、それは、ありがとう - 私は実際にそのページを読んだが、それを逃した必要があります。私は、愚かなことに、処理されない例外を抑止しないという標準的な慣習に反するものは、それらの素敵な黄色いボックスの中に入っていると仮定していたと思います。 @Tyson、 – Tyson

+0

が合意した。それは他の場所との醜い不一致を紹介する。 –

関連する問題