C# Thread.Abort()何时不会实际中止?

C# Thread.Abort()何时不会实际中止?,c#,multithreading,abort,C#,Multithreading,Abort,你读了标题,Thread.Abort()什么时候不会真正中止?我听很多人说,这是一个危险的命令,而且它永远不能保证工作,但我从来没有真正能够复制它。这对我来说一直都很有效 是否存在任何可能导致Thread.Abort()持续失败的特定情况?您读过吗 线程不能保证立即中止,或者根本不能中止。如果线程在作为中止过程的一部分调用的finally块中执行了无限量的计算,从而无限期地延迟中止,则可能发生这种情况。要等待线程中止,可以在调用中止方法后调用线程上的Join方法,但不能保证等待会结束。 如果对

你读了标题,Thread.Abort()什么时候不会真正中止?我听很多人说,这是一个危险的命令,而且它永远不能保证工作,但我从来没有真正能够复制它。这对我来说一直都很有效

是否存在任何可能导致Thread.Abort()持续失败的特定情况?

您读过吗

线程不能保证立即中止,或者根本不能中止。如果线程在作为中止过程的一部分调用的finally块中执行了无限量的计算,从而无限期地延迟中止,则可能发生这种情况。要等待线程中止,可以在调用中止方法后调用线程上的Join方法,但不能保证等待会结束。

如果对尚未启动的线程调用Abort,则调用Start时该线程将中止。如果对阻塞或休眠的线程调用Abort,则该线程将被中断,然后中止

如果对已挂起的线程调用Abort,则在调用Abort的线程中抛出ThreadStateException,并将AbortRequested添加到被中止线程的ThreadState属性中。在调用Resume之前,不会在挂起的线程中抛出ThreadAbortException

如果在托管线程执行非托管代码时对其调用Abort,则在该线程返回托管代码之前不会引发ThreadAbortException

如果两个中止调用同时出现,则一个调用可以设置状态信息,另一个调用可以执行中止。但是,应用程序无法检测到这种情况

在线程上调用Abort后,线程的状态包括AbortRequested。由于成功调用Abort而终止线程后,线程的状态将更改为Stopped如果有足够的权限,作为中止目标的线程可以使用ResetAbort方法取消中止。有关演示调用ResetAbort方法的示例,请参阅ThreadAbortException类


还有一种情况是,Thread.Abort()调用没有失败,但线程没有终止。抛出的ThreadAbortException可以被线程本身捕获。如果它这样做,然后在catch处理程序中调用Thread.ResetAbort(),则ThreadAbortException将不会在catch块的末尾重新启动。

谢谢。。我在谷歌上搜索了答案,但没有在搜索结果中找到文档,也许将来我会更仔细地检查msdn。我不认为搜索这么简单。@ta.speot。这是你没有获得更多投票的遗憾,这是关于线程的最佳答案。中止问题我见过:)。