为什么计时器线程上的未处理异常不会导致进程崩溃

Tys*_*son 7 .net multithreading asynchronous unhandled-exception c#-4.0

我知道在使用Tasks 时如何处理无法处理的异常,如果用户代码尚未"观察"它,则仅在终结器中抛出未处理的异常.

我也知道如何Action.BeginInvoke()在加入调用中捕获并重新抛出异步线程(例如)中的未处理异常(例如Action.EndInvoke()).

我不明白的是,这不会导致这个过程崩溃的原因是什么?

    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 );
    }
Run Code Online (Sandbox Code Playgroud)

Pol*_*ity 9

从.NET 4.0文档:

在.NET Framework 2.0及更早版本中,定时器组件捕获并抑制由事件处理程序经过的事件引发的所有异常.在将来的.NET Framework版本中,此行为可能会发生更改.

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

没有声明声称此行为实际上已发生变化.