Прервать спящую нить

Есть ли способ прервать спящий поток? Если у меня есть код, похожий на этот.

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

}

Я хочу выполнять DoWork () каждый час. Итак, я хотел бы поспать чуть дольше 10 секунд. Скажем, проверять каждые 10 минут или около того. Однако если установить сон на 10 минут и я хочу убить эту фоновую задачу, мне придется ждать возобновления сна.

Фактически мой код использует Threading.ManualResetEvent для завершения фоновой работы, но моя проблема связана с кодом ThreadSleep. Я могу опубликовать больше кода, если это необходимо.

Хорошо, я собираюсь добавить немного более полный код здесь, так как я думаю, что он ответит на некоторые вопросы.

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();

    }
}

Моя проблема здесь,

_backGroundWorkerThread.Join();

Это ожидает Thread.Sleep в ExecuteWorker (), который работает в моем фоновом потоке.

Ответы на вопрос(1)

Ваш ответ на вопрос