我正在使用基于任务的(TPL)线程模型。启动我的应用程序(WPF)时,我注册 TaskScheduler.UnobservedTaskException 以显示消息。
但是,如果引发异常(egTask.Factory.StartNew(()=> throw new Exception());)在引发UnobservedTaskException事件之前需要相当长的时间(3-10秒)
我希望立即提出(或者至少非常快),对这可能是什么情况有任何想法?
此致
答案 0 :(得分:2)
这是因为该线程的终结器尚未运行。由于这发生在垃圾收集中,这种非确定性。另外,CLR如何确定是立即抛出它还是想检查任务的结果或者调用Wait()
并自己观察异常?
如果启用Break on First Chance Exceptions,则会在调试时抛出它。
它会被传播回加入线程,保证。如果您使用的是.NET 4.0,则您的进程将终止。如果您使用的是.NET 4.5,则不会