Thread.Abort()是否曾被.NET运行时调用?

时间:2014-03-27 19:28:02

标签: c# .net multithreading exception

我已经继承了一些服务代码,并且我试图追踪服务崩溃的问题。我在很多地方找到了以下代码:

catch (ThreadAbortException)
{
    throw;
}

但是,我无法在项目的任何部分(或相关项目)中找到对Thread.Abort()Thread.Kill()的任何调用。

.NET运行时是否隐式调用了Thread.Abort(),或者该异常仅用于捕获开发人员进行的调用?我试图缩小我的错误途径,而且我对C#中的线程不太熟悉。我试图确定,如果在我的代码库中实际上从未调用过Thread.Abort(),那么我所显示的catch块是否实际被击中。

谢谢!

编辑:我想澄清 - 我知道.NET可以杀死线程,但我想知道它是否专门调用Thread.Abort()或是否使用其他方法(因为ThreadAbortException仅被调用在Thread.Abort()

2 个答案:

答案 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