【发布时间】:2012-08-06 12:46:32
【问题描述】:
我是多线程应用程序的新手。在开始研究之前,我几乎没有任何疑问。 谁能解开这些疑惑?
- 如何处理多线程应用程序中的异常?
- 如果任何1个线程出现异常,会不会整个应用程序都会来 下?还是所有其他线程都会继续?
【问题讨论】:
-
@Anonymous 你能详细说明一下吗?
标签: c# multithreading .net-3.5
我是多线程应用程序的新手。在开始研究之前,我几乎没有任何疑问。 谁能解开这些疑惑?
【问题讨论】:
标签: c# multithreading .net-3.5
如何处理多线程应用程序中的异常?
最好的方法是在线程内部,但有时例如。 (线程池)这很难。处理未处理的异常取决于应用程序的类型:
ASP.NET、WinForms、...有自己的机制。
但请考虑:特别是在开发以允许默认处理并进入调试器时(添加 if (Debugger.IsAttached) { Debugger.Break(); } 对定义永久断点非常有帮助
如果任何1个线程出现异常,整个应用程序会宕机吗?
这取决于。在 ASP.NET 中:否(如果启用调试,您将看到黄屏死机,否则会出现 500 服务器错误结果);在其他主机中:取决于(但通常答案是“是”,该进程将终止)。
这方面的一些细节在 .NET 版本之间发生了变化——通常会变得更加严格,因此您需要进行研究。最后:在 .NET 4 中,当然也可能在之前,某些异常(例如StackOverflowException)无法被捕获,因为如果它们被抛出,没有可靠的方法来获得一致的进程状态。 p>
【讨论】:
如果您使用 TPL,则可以使用聚合异常。这个聚合异常是一个异常的集合,你可以通过它们循环查看哪个线程执行失败,更多信息可以在这里找到。 http://msdn.microsoft.com/en-us/library/dd997415.aspx
【讨论】: