私は、かなり典型的な問題だと思うものに対して思いついた解決策を検証しようとしています。サービスを実行していますが、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 変更の周りでロックを行っていないことですが、本当に必要かどうかはわかりません。起こりうる最悪の事態は、1 サイクル余分に実行されることです。
それ以外に、このコードに明らかな問題はありますか? 私が知らないこの問題を解決するより良い方法はありますか?