나는 꽤 전형적인 문제라고 생각되는 것을 생각해 냈습니다. 나는 서비스를 운영하고 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는 수정 주위에 잠금 어떤 종류의 일을하고 있지 않다이다 내가 정말로 해야할지 모르겠다? 내가 생각할 수있는 최악의 상황은 그것이 하나의 추가 사이클을 실행한다는 것입니다.
그 외에도이 코드에 명백한 문제가 있습니까? 내가 모르는이 문제를 해결할 더 좋은 방법이 있습니까?
'while' 내부에'if'가 중복되지 않습니까? – Kelsey
좋은 캐치. 그것은 실제로 지금 고정되어있는 나의 예에서 실수입니다. DoSomething 호출은 실제로 if의 외부에서 발생합니다. DoSomething에 잠시 시간이 걸릴 수 있으므로 잠을 자기 전에 아직 실행 중인지 확인해야합니다. –