2010-03-16 4 views
1

Каков наилучший способ использования таймера. Используйте класс System.Timer.Timer или используйте один поток в цикле без конца с инструкцией Thread.Sleep?Каков наилучший подход для реализации таймера потока

Заранее спасибо

+0

Зависит от того, чего вы хотите достичь ... Если вам нужно что-то с целями времени, чем вы должны использовать ... дождитесь его ... таймеры: D – RvdK

ответ

0

Используйте таймер. Это там, специально для этой цели, так почему бы вам не использовать его?

3

В целом, используйте компоненты, которые уже есть, если они удовлетворяют вашим потребностям. Однако System.Threading.Timer использует пул потоков .NET, поэтому любой из следующих условий сделали бы его плохой кандидат:

  • Вам требуется STA нить (все ThreadPool потоков MTA)
  • Вы требуете, чтобы все вхождения ваш повторил запуск задач в том же потоке
  • Вы хотите назначить определенный приоритет (ниже или выше) для ваших задач
  • Ваши задачи особенно давно работает или использовать нетривиальные блоки
0

Два метода, на которые вы ссылаетесь, используются для разных результатов.

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

Метод, который выполняет петли и сны, не будет вызываться, когда он занят. «Преимущество» здесь заключается в том, что вы можете выполнить DoWork, а затем обнаружите, что следующее событие таймера уже прошло, а DoWork - сразу. Альтернативой является то, что у вас есть периоды отдыха, когда вы спите определенное количество времени, независимо от того, как долго ваш метод DoWork.

Смежные вопросы