C# .NET运行时是否调用过Thread.Abort()?
我继承了一些服务代码,我正试图找出服务崩溃的问题。我在许多地方发现了以下代码:C# .NET运行时是否调用过Thread.Abort()?,c#,.net,multithreading,exception,C#,.net,Multithreading,Exception,我继承了一些服务代码,我正试图找出服务崩溃的问题。我在许多地方发现了以下代码: catch (ThreadAbortException) { throw; } 但是,我在项目的任何部分(或相关项目)中都找不到对Thread.Abort()或Thread.Kill()的调用 Thread.Abort()是否曾被.NET运行时隐式调用,或者该异常是否只存在于捕获开发人员的调用时?我试图缩小我的错误范围,但我对C#中的线程不是很有经验。如果Thread.Abort()从未在我的代码库中实际调
catch (ThreadAbortException)
{
throw;
}
但是,我在项目的任何部分(或相关项目)中都找不到对Thread.Abort()
或Thread.Kill()
的调用
Thread.Abort()
是否曾被.NET运行时隐式调用,或者该异常是否只存在于捕获开发人员的调用时?我试图缩小我的错误范围,但我对C#中的线程不是很有经验。如果Thread.Abort()
从未在我的代码库中实际调用,我将尝试确定我显示的catch块是否实际命中
谢谢
编辑:我想澄清一下-我知道.NET可以杀死线程,但我想知道它是否专门调用
Thread.Abort()
,或者它是否使用了其他方法(因为ThreadAbortException
仅在Thread.Abort()
Catch/throw上调用,而不做任何事情似乎毫无意义
这些错误在ASP.NET中很常见-它表示结束响应的重定向,例如
或者它意味着一个工作进程由于自身的神秘原因被Casini/iis/aspnet杀死,可能是工作进程被回收,等等
它通常不表示编程错误
在大多数情况下,在多线程应用程序中调用Thread.Abort()似乎是一个坏主意,而在其他情况下,这样说比我能做的更好
编辑:我想澄清一下-我知道.NET可以杀死线程,但我是
不知道它是专门调用Thread.Abort()还是使用
其他一些方法(如ThreadAbortException仅在
Thread.Abort()
如果你真的有兴趣看看是否(以及在哪里)它做到了这一点,请参阅,它相当完整。具体地说,它显示
Thread.Abort
在处引用。是的,运行时中止线程。这些是粗鲁的中止,在AppDomain卸载时触发,它们不会触发该代码。避免假设以前的程序员知道他在做什么或正确地清理了他的代码。他rhaps认为这毕竟不是一个好主意。事实并非如此。如果线程被中止并引发异常……异常将在调用堆栈中冒泡,对吗?异常是否会在线程之间冒泡?它是否会传播到父线程?我很少看到它们进入错误日志(收集在global asax上的错误处理程序中)和开发机器上,这些机器通常会执行一些不寻常的操作,如终止Casini进程、终止iis或其他粗略关闭。啊,有趣的是:ThreadAbortException意味着线程是故意终止/被终止的。