Interrompa um tópico adormecido

Existe uma maneira de interromper um fio adormecido? Se eu tiver um código semelhante a est

while(true){
    if(DateTime.Now.Subtract(_lastExecuteTime).TotalHours > 1){
        DoWork();
        _lastExecuteTime = DateTime.Now();
        continue; 
    }
    Thread.Sleep(10000) //Sleep 10 seconds
    if(somethingIndicatingQuit){
        break;
    }

}

Estou querendo executar o DoWork () a cada hora. Então, eu gostaria de dormir um pouco mais de 10 segundos. Diga cheque a cada 10 minutos ou mais. No entanto, se definir meu sono para 10 minutos e eu desejar interromper essa tarefa em segundo plano, tenho que aguardar o retorno do sono.

Meu código real está usando um Threading.ManualResetEvent para encerrar o trabalho em segundo plano, mas meu problema é com o código ThreadSleep. Posso postar mais código, se necessári

OK, vou adicionar um código um pouco mais completo aqui, pois acho que ele responderá a algumas das pergunta

private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
private readonly ManualResetEvent _pauseEvent = new ManualResetEvent(true);
private Thread _backGroundWorkerThread;

//This starts our work
public void Start() {
    _backGroundWorkerThread = new Thread(ExecuteWorker) {IsBackground = true, Name = WorkerName + "_Thread"};
    _shutdownEvent.Reset();
    _backGroundWorkerThread.Start();
}
internal void Stop() {
    //Signal the shutdown event
    _shutdownEvent.Set();

    //Make sure to resume any paused threads
    _pauseEvent.Set();

    //Wait for the thread to exit
    _backGroundWorkerThread.Join();

}

private void ExecuteWorker() {
    while (true) {
        _pauseEvent.WaitOne(Timeout.Infinite);

        //This kills our process
        if (_shutdownEvent.WaitOne(0)) {
           break;
        }

        if (!_worker.IsReadyToExecute) {
            //sleep 5 seconds before checking again. If we go any longer we keep our service from shutting down when it needs to.
            Thread.Sleep(5000);
            continue;
        }
        DoWork();

    }
}

Meu problema está aqui,

_backGroundWorkerThread.Join();

Este aguarda o Thread.Sleep no ExecuteWorker () que está sendo executado no meu thread de segundo plan

questionAnswers(6)

yourAnswerToTheQuestion