多线程,如果一个线程崩溃将会发生什么应用程序

时间:2012-08-09 10:01:25

标签: c# multithreading .net-3.5

我是多线程应用程序的新手。在开始研究之前,我几乎没有怀疑。 任何人都可以清除这些疑虑吗?

  1. 如何处理多线程应用程序中的异常?
  2. 如果任何1个线程中有任何异常,整个应用程序将会到来 下?还是所有其他线程都会继续?

2 个答案:

答案 0 :(得分:4)

  

如何处理多线程应用程序中的异常?

最好的方法是在线程内部,但有时候例如。 (线程池)这很难。处理未处理的异常取决于应用程序的类型:

ASP.NET,WinForms,...有自己的机制。

但请考虑:特别是在开发时允许默认处理并进入调试器(添加if (Debugger.IsAttached) { Debugger.Break(); }对于定义永久断点非常有用

  

如果任何1个线程中有任何异常,整个应用程序是否会被关闭?

这取决于。在ASP.NET中:否(如果启用了调试,您将看到黄色死机屏幕,否则会出现500服务器错误结果);在其他主机中:取决于(但通常答案是肯定的,该过程将终止)。

.NET版本之间的一些细节已经发生了变化 - 通常越来越严格,因此您需要进行研究。最后:在.NET 4当然,可能之前,某些异常(例如。StackOverflowException无法被捕获,因为如果抛出它们,则没有可靠的方法来获得一致的进程状态。

答案 1 :(得分:0)

如果您使用的是TPL,则可以使用Aggregate例外。此聚合异常是一组异常,您可以循环遍历它们以查看哪个线程无法执行更多信息可在此处找到。 http://msdn.microsoft.com/en-us/library/dd997415.aspx