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