有没有办法确保整个代码块在 .NET 线程中执行?

And*_*lla 3 .net multithreading

在我的 C# 程序中,我有一个代表正在运行的测试的线程,可以通过单击标有“中断执行”的按钮来中止该测试。为了让线程(以及测试)以优雅的方式终止(并预先做一些重要的工作),这个按钮仅在一些明确定义的时刻启用,在这些时刻我 catch ,ThreadAbortedExceptiondoThread.ResetAbort()和 die 漂亮(即,线程)。

问题是,在可以中止的时间窗口内,有些任务一旦启动就需要从头到尾完成,所以,我害怕TAE。锁并没有为此提供解决方案,而且,尽管 finally 块提供了解决方案,但我认为通过以下方式包装重要代码并不优雅:

try {
} finally {
  // vital code
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有找到任何其他解决方案。

这是将干扰延迟ThreadAbortException到块末尾的另一种方法吗?

Rob*_*ker 5

生成 ThreadAbortException 的情况可能很复杂。更好的选择可能是询问为什么要使用 ThreadAbortExceptions。

更好的模式是简单地使用一个标志来向正在运行的线程指示它应该中止,然后在该标志工作时定期测试该标志。如果已设置,您可以根据需要在此时抛出异常。

使用这种模式,您可以完全控制线程何时对中止执行操作,而不必担心关键操作被中断。