Я пытаюсь проверить решение, которое я нашел для того, что я считаю довольно типичной проблемой. У меня работает служба, и каждые 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();
}
Непосредственные потенциальные проблемы, которые я вижу, состоят в том, что я не делаю никакой блокировки вокруг модификации isRunning в Stop (), которая вызывается другим потоком, но я не уверен, что мне действительно нужно? Худшее, что я думаю, может случиться, это то, что он запускает один дополнительный цикл.
Кроме того, есть ли очевидные проблемы с этим кодом? Есть ли лучший способ решить эту проблему, о которой я не знаю?