作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 C# 程序中,我有一个表示正在运行的测试的线程,可以通过单击标有“中断执行”的按钮来中止它。为了使线程(以及因此测试)以优雅的方式终止(并提前完成一些重要工作),此按钮仅在某些明确定义的时刻启用,其中我捕捉到 ThreadAbortedException
, 做 Thread.ResetAbort()
并美丽地死去(即线程)。
问题是,在可以中止的时间窗口内,一旦启动,有些任务需要从头到尾完成,因此,我担心 TAE。锁并没有为此提供解决方案,虽然 finally block 可以,但我认为以以下方式包装重要代码并不优雅:
try {
} finally {
// vital code
}
ThreadAbortException
的干扰的方法吗?直到区 block 结束?
最佳答案
将生成 ThreadAbortException 的情况可能很复杂。更好的选择可能是询问您为什么要使用 ThreadAbortExceptions。
更好的模式是简单地使用一个标志来向正在运行的线程指示它应该中止,然后在它工作时定期测试标志。如果已设置,您可以根据需要在此时抛出异常。
使用这种模式,您可以完全控制线程何时执行中止操作,而不必担心关键操作会被中断。
关于.net - 有没有办法确保在 .NET 线程中执行整个代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144/
我是一名优秀的程序员,十分优秀!