Использование системы. Таймеры. Таймер в asp.net

Я использую следующий код в веб-сайте asp.net.

На приложении init я называю InitializeTimer () однажды.

Цель кода состояла в том, чтобы выполнить DoWork () один раз в час (в 1 раз в час).

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

Результат, который я получил, был странным, я не могу найти explaination, почему, происходит.

Код выполнил функцию после 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();
}

Обновление:

  1. Не отправляйте "сервис окон использования" или "запланированную задачу". Мой вопрос для следующего кода, я не ищу лучшие альтернативы. Кроме того, во время этого теста (10 часов), веб-сайт был с интенсивным трафиком, iis пул не перезапускал!

  2. На основе следующего MSDN: (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)

Если интервал установлен после того, как Таймер запустился, количество сбрасывается. Например, если Вы устанавливаете интервал на 5 секунд и затем устанавливаете свойство Enabled на истинный, количество запускается, в то время, когда Включено установлен. При сбросе интервала к 10 секундам, когда количество составляет 3 секунды, событие Elapsed генерируется впервые спустя 13 секунд, после того, как Включено имел значение true.

Действительно ли возможно, что сброс интервала в прошедшей функции является причиной проблемы?

Означание, что то, когда функция tTimer_Elapsed вызвана количество, составляет 1 час (минута некоторые миллисекунда) и мой код "таймер. Интервал + = случайный. Затем (-5, 5)"; добавляет другой целый час к Интервалу?

11
задан John Saunders 13 February 2010 в 00:42
поделиться

3 ответа

Проверьте это ... Джефф Этвуд действительно обсуждал нечто подобное. Я предполагаю, что это сработало, но, по словам Джеффа, сайт перерос этот метод, поэтому они перешли к специальной задаче.

4
ответ дан 3 December 2019 в 08:55
поделиться

Я поддерживаю предложение Sams об использовании запланированной задачи windows для перехода на страницу каждый час. Я пытался и пытался заставить свою задачу работать, и она вроде как сработала. Я перешел на запланированную задачу, и она никогда не подводила.

1
ответ дан 3 December 2019 в 08:55
поделиться

Я бы сказал, что тривиальные вещи, подобные этому, вероятно, оптимизированы компилятором, и вы не должны беспокоиться о них. Первый вариант наиболее удобочитаемый, поэтому вы должны использовать его.

EDIT: Добавление того, что сказано в других ответах, также есть разница в том, что при объявлении переменной в инициализаторе цикла она прекратит свое существование после завершения цикла.

-121--3221158-

Для меня я думаю, что лучший и простой способ - создать временную таблицу, которая имеет все ваши связанные поля плюс дополнительное поле, которое является полем yeas/no.

, то вы будете использовать эту таблицу в качестве источника данных для непрерывной для. Для заполнения временной таблицы требуемыми данными используется функция onLoad.

Я думаю, что после этого легко сделать цикл для выбора, просто небольшой цикл, чтобы прочитать yeas/no поле из временной таблицы.

Надеюсь, это поможет

-121--2688874-

ASP.NET приложения завершают работу, когда они не используются. Если кто-то попадет на ваш сайт, а потом больше не попадет, он может быть закрыт. Твой таймер не сработает.

Для этого типа работ по обслуживанию необходимо использовать запланированную задачу Windows или службу Windows.

5
ответ дан 3 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: