有关的:
如果某个方法抛出了由 ThreadPool.QueueUserWorkItem 方法调用的异常,该异常将在哪里抛出?还是只会被吃掉?
我的意思是它永远不会被扔到调用线程上,对吗?
有关的:
如果某个方法抛出了由 ThreadPool.QueueUserWorkItem 方法调用的异常,该异常将在哪里抛出?还是只会被吃掉?
我的意思是它永远不会被扔到调用线程上,对吗?
不,异常永远不会传播到另一个线程。它最终会使线程崩溃,并被运行时捕获。此时,运行时会引发 AppDomain.UnhandledException 事件,在该事件中可以观察到异常。
您可以在此处阅读有关此内容的更多信息。
如果未在您的线程回调中捕获该异常(被吞下的 ThreadAbortException 和 AppDomainUnloadedException 除外),则该异常将使您的应用程序崩溃。请注意,在 .NET 1.1 中,所有异常都被吞没了。这种行为在 .NET 2.0 中发生了变化。
我找到了这个链接:http: //msdn.microsoft.com/en-us/library/ms228965.aspx
未处理的异常将在 .Net 2.0 或更高版本中关闭应用程序。QUWI 代码中的异常不会被捕获或转移到另一个线程。
参见例如 https://blog.codinghorror.com/improved-unhandled-exception-behavior-in-net-20/