0

所以我在这里处理的是一个非常复杂的服务器应用程序,它执行相当长、复杂和冗长的操作,涉及许多线程和许多任务(是的,有些是作为任务创建的,有些是“手动”创建的线程。

我们这里所说的复杂而冗长的过程是使用 REST API 调用触发的(假设网页根据用户输入生成请求对象),并为用户提供一个 ID 以轮询操作的进度。

我正在寻找一种有效的方法来允许用户单击“中止/停止”按钮,该按钮将停止整个线程/任务管弦乐队。

(请记住,该服务器可以处理如上所述的多个请求)。

我研究了许多选项,所有这些似乎都要求线程/任务本身在其操作循环期间监视“中止标志”,并在需要时退出循环。

显然使用Thread.Abort是一个很大的禁忌。

我曾想过拥有某种抽象类(例如:)AbortableThread,所有这些我的“工作”线程都必须实现,其中唯一的抽象函数是 Abort(),这样每个线程都可以以干净的方式结束,关闭并完成它需要的任何东西。

这样,我也许可以密切关注由特定用户请求产生的线程,然后循环调用Abort()foreach

尽管如此,我仍然试图弄清楚它如何能够闯入我运行的循环,所以我的第二个想法是这个“抽象”类可能有一个属性shouldBreak,我将再次能够从“外部”设置”,但这让我回到(几乎)第一方,我必须在我的线程中添加“逻辑”才能中止。

我想出的第三个想法是让我的逻辑循环Abort()在每个循环上调用,而无需任何验证当前是否需要中止,在那里我将检查我的抽象基类 shouldBreak bool 并在需要时采取相应的行动。

没有代码示例,我决定在深入实施之前我宁愿在高层次上弄清楚这一点。

感谢您阅读这个长长的问题!

4

0 回答 0