- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在遗留代码库中遇到了一种多线程模式,它依赖于 Thread.Abort()
方法来取消对外部系统的同时请求。一个不好的后果是很难将超时异常与其他异常类型区分开来。
在多线程控制流中不使用 ThreadAbortException
的其他原因是什么?
最佳答案
What are the other reasons not to use ThreadAbortExceptions in multithreaded control flow?
Thread.Abort 会使线程处于非常奇怪的状态,这可能无法干净地处理。
来自 Thread.Abort 的文档:
if one thread calls Abort on another thread, the abort interrupts whatever code is running. There is also a chance that a static constructor could be aborted. In rare cases, this might prevent instances of that class from being created in that application domain. In the .NET Framework versions 1.0 and 1.1, there is a chance the thread could abort while a finally block is running, in which case the finally block is aborted.
如果您在多线程代码中工作,这可能会更加危险,因为它可能会触发死锁。这也记录在案:
The thread that calls Abort might block if the thread that is being aborted is in a protected region of code, such as a catch block, finally block, or constrained execution region. If the thread that calls Abort holds a lock that the aborted thread requires, a deadlock can occur.
一般来说,使用框架的 cooperative cancellation model 更安全、更简洁。 ,永远不要调用 Thread.Abort
。使用 CancellationToken
和 CancellationTokenSource
允许您以干净的方式设计正确的取消,并且线程可以正确处理自己的清理。
关于.net - ThreadAbortException 的不良后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16655114/
我正在使用 WinDBG 调查内存转储,我想知道为什么堆中有两个 System.Threading.ThreadAbortExceptions 都是空的。 对于其他三个已发现的异常,我理解它们存在的原
我最近在遗留代码库中遇到了一种多线程模式,它依赖于 Thread.Abort() 方法来取消对外部系统的同时请求。一个不好的后果是很难将超时异常与其他异常类型区分开来。 在多线程控制流中不使用 Thr
我在一个 MVC3 应用程序中有几个长时间运行的线程,它们打算永远运行。 我遇到了一些其他代码(不是我的)正在调用 ThreadAbortException 的问题,我需要从中恢复并重新启动线程。现在
据我们所知,Server.Transfer执行时抛出 ThreadAbortException。 此外,ThreadAbortException 继承异常: 那么为什么异常不会进入 catch blo
我有一个 WCF 服务,该服务接受请求并针对每个请求进行 HTTPWebRequest 调用并返回响应。我使用 BlockingCollection 来存储传入的请求,并使用一个单独的线程处理(生成
我遇到了一个奇怪的错误。我有大约 100 个长时间运行的任务,我想同时运行其中的 10 个。 我在这里找到了与我的需求非常相似的东西:http://msdn.microsoft.com/en-us/l
如果我尝试使用控制台应用程序中的线程一次执行 >100 个数据库插入,我会收到以下错误。根据当前架构,我需要一次插入一条记录。对于较少数量的记录 (10-30),错误不会发生。一次插入这么多记录是否会
下面的代码仅用于说明问题。请忽略使用 CodeDom 编译源代码的部分。此外,如果您尝试它,它会使“其他进程”可执行文件继续运行并无益地消耗 CPU 时间。 真正的问题是我启动线程,然后中止线程并看到
我读过的所有内容都声称线程中止将在从 ThreadAbortException 结束之前执行 finally block 。我想确认这一点,这样我就可以计划如何处理一些可以无限期挂起的第三方代码。但是
记录异常时忽略 ThreadAbortException 的正确方法是什么? 将它捕获在一个空的捕获块中使其消失是否安全? 最佳答案 如果您需要停止 ThreadAbortException进一步向上
catch (ThreadAbortException) { } catch (Exception ex) { TraceManager.TraceException(ex,
我想检查以下代码是否可以抵抗 ThreadAbortException 并且不会导致孤儿锁。如果不是,避免孤儿锁的最佳模式是什么? ReaderWriterLockSlim _lock = new R
我有一些现有的遗留代码,我想对其进行测试。这是要点的复制: public class LegacyUnit { private readonly ICollaborator collabora
我正在使用 mysql 开发 ASP.NET。访问数据库时出现一些异常(仅在生产中) StackStrace-1: at System.Threading.Thread.AbortInternal()
我正在努力提高一段代码的异常安全性,我意识到引发的 ThreadAbortException 可能会导致意外的资源泄漏,即使在使用 C# using 被使用。 最佳答案 是的,避免这种情况的确定性方法
参见http://support.microsoft.com/kb/312629/EN-US/ 我也在我的应用程序中使用了reponse.direct,但没有收到异常。知识库文章建议的解决方法(Ser
我正在使用 .NET 1.1 兼容模式进行未处理的异常处理。问题是,当 LegacyUnhandledExceptionPolicy 设置为“1”(这是我想要的)时,我无法捕获并吞下 ThreadAb
我目前在 .net c# 4.0 中工作,并且遇到了一些我编写的代码的问题,这让我有些头疼。 我将 System.Threading.Tasks.TaskFactory 类与 System.Threa
我收到错误 Unable to evaluate expression because the code is optimized or a native frame is on the top of
当中止线程的执行时,我总是在优雅退出和这样的事件处理程序之间犹豫不决: int result = WaitHandle.WaitAny(handles); if (result = WAIT_FINA
我是一名优秀的程序员,十分优秀!