Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET运行时是否调用过Thread.Abort()?_C#_.net_Multithreading_Exception - Fatal编程技术网

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意味着线程是故意终止/被终止的。