我正在尝试验证我为我认为是一个相当典型的问题提出的解决方案。我有一项服务正在运行,每 10 分钟它应该做一些事情。我最终得到了以下结果:
private AutoResetEvent autoResetEvent = new AutoResetEvent(true);
private bool isRunning = true;
public void Execute()
{
while(isRunning)
{
DoSomething();
if(isRunning)
{
autoResetEvent.WaitOne(new Timespan(0, 10, 0));
}
}
}
public void Stop()
{
isRunning = false;
autoResetEvent.Set();
}
我可以看到的直接潜在问题是我没有对 Stop() 中的 isRunning 修改进行任何类型的锁定,该修改被另一个线程调用,但我不确定我真的需要吗?我认为可能发生的最坏情况是它会运行一个额外的周期。
除此之外,这段代码还有什么明显的问题吗?有没有更好的方法来解决我不知道的这个问题?