如何处理重复执行?

Sha*_*lle 3 c# multithreading recurring

我试图验证我提出的解决方案,我认为这是一个相当典型的问题.我有一个服务运行,每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();
}
Run Code Online (Sandbox Code Playgroud)

我可以看到的直接潜在问题是,我没有对Stop()中的isRunning修改进行任何类型的锁定,这被另一个线程调用,但我不确定我真的需要吗?我认为最糟糕的情况是它会运行一个额外的周期.

除此之外,这段代码有任何明显的问题吗?有没有更好的方法来解决这个我不知道的问题?

小智 7

您可以尝试使用System.Threading.Timer:

Timer tmr = new Timer(DoSomething, null, new TimeSpan(0, 0, 0), new TimeSpan(0, 10, 0))
Run Code Online (Sandbox Code Playgroud)