多线程,如果线程崩溃,应用程序会发生啥
Posted
技术标签:
【中文标题】多线程,如果线程崩溃,应用程序会发生啥【英文标题】:Multithreading, if a thread get crashed what will happen to application多线程,如果线程崩溃,应用程序会发生什么 【发布时间】:2012-08-06 12:46:32 【问题描述】:我是多线程应用程序的新手。在开始研究之前,我几乎没有任何疑问。 谁能解开这些疑惑?
-
如何处理多线程应用程序中的异常?
如果任何1个线程出现异常,会不会整个应用程序都会来
下?还是所有其他线程都会继续?
【问题讨论】:
@Anonymous 你能详细说明一下吗? 【参考方案1】:如何处理多线程应用程序中的异常?
最好的方法是在线程内部,但有时例如。 (线程池)这很难。处理未处理的异常取决于应用程序的类型:
WPF:使用Application.DispatcherUnhandledException
控制台或服务:使用AppDomain.UnhandledException
ASP.NET、WinForms、...有自己的机制。
但请考虑:特别是在开发以允许默认处理并进入调试器时(添加 if (Debugger.IsAttached) Debugger.Break();
对定义永久断点非常有帮助
如果任何1个线程出现异常,整个应用程序会宕机吗?
这取决于。在 ASP.NET 中:否(如果启用调试,您将看到黄屏死机,否则会出现 500 服务器错误结果);在其他主机中:取决于(但通常答案是“是”,该进程将终止)。
这方面的一些细节在 .NET 版本之间发生了变化——通常会变得更加严格,因此您需要进行研究。最后:在 .NET 4 中,当然也可能在之前,某些异常(例如***Exception
)无法被捕获,因为如果它们被抛出,没有可靠的方法来获得一致的进程状态。 p>
【讨论】:
@Matt 做一些 ASP.NET 编码,除非你把一切都做对了,否则你会看到很多。是 ASP.NET 错误显示。 谢谢。我是 VB.NET 编码员,所以我只见过 BSOD(太频繁了!)【参考方案2】:如果您使用 TPL,则可以使用聚合异常。这个聚合异常是一个异常的集合,你可以通过它们循环查看哪个线程执行失败,更多信息可以在这里找到。 http://msdn.microsoft.com/en-us/library/dd997415.aspx
【讨论】:
以上是关于多线程,如果线程崩溃,应用程序会发生啥的主要内容,如果未能解决你的问题,请参考以下文章