我有一堂课是“经理”类的课。它的功能之一是指示类的长时间运行的进程应该关闭。它通过在类中设置一个名为“IsStopping”的布尔值来做到这一点。
public class Foo
{
bool isStoping
void DoWork() {
while (!isStopping)
{
// do work...
}
}
}
现在,DoWork() 是一个巨大的函数,我决定将它重构出来,并作为该过程的一部分将其中的一些分解为其他类。问题是,其中一些类也有长时间运行的函数,需要检查 isStopping 是否为真。
public class Foo
{
bool isStoping
void DoWork() {
while (!isStopping)
{
MoreWork mw = new MoreWork()
mw.DoMoreWork() // possibly long running
// do work...
}
}
}
我在这里有什么选择?
我考虑过通过引用传递 isStopping,我不太喜欢,因为它需要有一个外部对象。我更愿意使附加类尽可能独立且无依赖。
我也考虑过制作 isStopping 一个属性,然后让它调用一个可以订阅内部类的事件,但这似乎过于复杂。
另一种选择是创建一个“进程取消令牌”类,类似于 .net 4 任务使用的类,然后将该令牌传递给这些类。
你是如何处理这种情况的?
编辑:
还要考虑 MoreWork 可能有一个 EvenMoreWork 对象,它实例化并调用一个可能长时间运行的方法......等等。我想我正在寻找的是一种能够在调用树下向任意数量的对象发出信号的方法,以告诉他们停止正在做的事情并清理并返回。
编辑2:
感谢您到目前为止的回复。似乎对使用方法没有真正的共识,每个人都有不同的意见。似乎这应该是一种设计模式......