AutoResetEvent и логическое значение для остановки потока

У меня есть объект в рабочем потоке, которому я могу приказать прекратить выполнение. Я могу реализовать это с помощью bool или AutoResetEvent :

. логический:

private volatile bool _isRunning;

public void Run() {
    while (_isRunning)
    {
        doWork();
        Thread.Sleep(1000);
    }
}

Автосброс события:

private AutoResetEvent _stop;

public void Run() {
    do {
        doWork();
    } while (!_stop.WaitOne(1000));
}

Затем метод Stop()установит для _isRunningзначение false или вызовет _stop.Set().

Кроме того, решение с AutoResetEvent может останавливаться немного быстрее, есть ли разница между этими методами? Один "лучше" другого?

12
задан Sjoerd 14 August 2012 в 14:27
поделиться