我已经继承了一些服务代码,并且我试图追踪服务崩溃的问题。我在很多地方找到了以下代码:
catch (ThreadAbortException)
{
throw;
}
但是,我无法在项目的任何部分(或相关项目)中找到对Thread.Abort()
或Thread.Kill()
的任何调用。
.NET运行时是否隐式调用了Thread.Abort()
,或者该异常仅用于捕获开发人员进行的调用?我试图缩小我的错误途径,而且我对C#中的线程不太熟悉。我试图确定,如果在我的代码库中实际上从未调用过Thread.Abort()
,那么我所显示的catch块是否实际被击中。
谢谢!
编辑:我想澄清 - 我知道.NET可以杀死线程,但我想知道它是否专门调用Thread.Abort()
或是否使用其他方法(因为ThreadAbortException
仅被调用在Thread.Abort()
。
答案 0 :(得分:2)
在没有采取任何措施的情况下抓住/扔掉似乎毫无意义。
这些错误在ASP.NET中很常见 - 它意味着结束响应的重定向,例如。 ASP.NET Response.Redirect( ) Error
或者它意味着一个工人进程被casinni / iis / aspnet杀死,因为它有神秘的原因,可能是工人进程回收等等。
它通常不表示编程错误。
在大多数情况下,在多线程应用程序中调用Thread.Abort()似乎是一个坏主意,并且SO上的其他答案比我说得更好。
答案 1 :(得分:0)
编辑:我想澄清 - 我知道.NET可以杀死线程,但我是 想知道它是否专门调用Thread.Abort()或它是否使用 一些其他方法(因为只调用ThreadAbortException) Thread.Abort的()。
如果您真的想知道它是否(以及在哪里),请参考.NET Reference Source,它非常完整。具体来说,它显示these places引用了Thread.Abort
。