Каков наилучший способ использования таймера. Используйте класс System.Timer.Timer или используйте один поток в цикле без конца с инструкцией Thread.Sleep?Каков наилучший подход для реализации таймера потока
Заранее спасибо
Каков наилучший способ использования таймера. Используйте класс System.Timer.Timer или используйте один поток в цикле без конца с инструкцией Thread.Sleep?Каков наилучший подход для реализации таймера потока
Заранее спасибо
Используйте таймер. Это там, специально для этой цели, так почему бы вам не использовать его?
В целом, используйте компоненты, которые уже есть, если они удовлетворяют вашим потребностям. Однако System.Threading.Timer
использует пул потоков .NET, поэтому любой из следующих условий сделали бы его плохой кандидат:
ThreadPool
потоков MTA)Два метода, на которые вы ссылаетесь, используются для разных результатов.
Таймеры будут запускать событие и вызывать ваш метод на запланированный интервал. Они могут вызывать ваш метод, пока другой экземпляр его запущен, если вы не остановите таймер в начале вашей обработки (DoWork) и запустите его снова, когда закончите (но тогда вы можете пропустить синхронизированные события).
Метод, который выполняет петли и сны, не будет вызываться, когда он занят. «Преимущество» здесь заключается в том, что вы можете выполнить DoWork, а затем обнаружите, что следующее событие таймера уже прошло, а DoWork - сразу. Альтернативой является то, что у вас есть периоды отдыха, когда вы спите определенное количество времени, независимо от того, как долго ваш метод DoWork.
Зависит от того, чего вы хотите достичь ... Если вам нужно что-то с целями времени, чем вы должны использовать ... дождитесь его ... таймеры: D – RvdK