Я использую следующий код на веб-сайте asp.net.
В приложении init я вызываю InitializeTimer() один раз.
Целью кода было запустить DoWork() один раз в час (1 раз в час).
Я также хотел, чтобы код выполнялся в разное время каждого цикла, поэтому я добавил случайную часть.
Результат, который я получил, был werid, я не могу найти объяснение, почему происходит.
Код выполнил функцию через 2 часа, затем снова через 2 часа, затем после 3 часа, затем через 2 часа и 2 часа снова. ****
Кто-нибудь может объяснить причину?
using System.Timers;
....
private static random = new Random();
....
public static void InitializeTimer()
{
tTimer = new Timer();
tTimer.AutoReset = true;
tTimer.Interval = TimeSpan.FromHours(1.0).TotalMilliseconds;
tTimer.Elapsed += new ElapsedEventHandler(ClassName1.tMailer_Elapsed);
tTimer.Start();
}
private static void tTimer_Elapsed(object sender, ElapsedEventArgs e)
{
tTimer.Interval += random.Next(-5, 5);
DoWork();
}
Update:
-
Пожалуйста, не публикуйте "использовать службу Windows" или "запланированную задачу". Мой вопрос заключается в следующем коде. Я не ищу лучших альтернатив. Кроме того, во время этого теста (10 часов) веб-сайт был с высоким трафиком, iis-пул не перезагрузился!
-
На основе следующего MSDN: (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
Если интервал установлен после таймера, счетчик reset. Для Например, если вы установите интервал в 5 секунд, а затем установите значение Включено свойство true, счет начинается с устанавливается время Enabled. Если вы resetинтервал до 10 секунд, когда счетчик составляет 3 секунды, событие Истекшее поднят в первый раз 13 секунд после того, как Enabled установлено в значение true.
Возможно ли, что причиной изменения проблемы является повторная установка интервала в прошедшей функции?
Считая, что когда функция tTimer_Elapsed называется счетчиком, это 1 час (мин. несколько миллисекунд) и мой код "tTimer.Interval + = random.Next(-5, 5);" добавляет еще один полный час к интервалу?