У меня есть служба Windows, написанная на C #. Он имеет таймер внутри, который запускает некоторые функции на регулярной основе. Итак, скелет моего сервиса:
public partial class ArchiveService : ServiceBase
{
Timer tickTack;
int interval = 10;
...
protected override void OnStart(string[] args)
{
tickTack = new Timer(1000 * interval);
tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
tickTack.Start();
}
protected override void OnStop()
{
tickTack.Stop();
}
private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
}
Работает некоторое время (например, 10-15 дней), затем останавливается. Я имею в виду, что сервис показывает, что работает, но ничего не делает. Я делаю некоторые записи, и проблема может быть таймером, потому что после интервала он не вызывает функцию tickTack_Elapsed.
Я думал о том, чтобы переписать его без таймера, используя бесконечный цикл, который останавливает обработку на время, которое я установил. Это также не элегантное решение, и я думаю, что оно может иметь некоторые побочные эффекты в отношении памяти.
Таймер используется из пространства имен System.Timers, среда - Windows 2003. Я использовал этот подход в двух разных сервисах на разных серверах, но оба вызывают такое поведение (поэтому я подумал, что он каким-то образом связан с мой код или сама структура).
Кто-нибудь испытывал такое поведение? Что может быть не так?
Edit:
Я редактировал оба сервиса. Один получил хорошую попытку поймать везде и больше регистрации. Второй получил таймер-отдых на регулярной основе. Никто из них с тех пор не остановился, поэтому, если эта ситуация сохранится еще на неделю, я закрою этот вопрос. Спасибо всем за все.
Edit:
Я закрываю этот вопрос, потому что ничего не произошло. Я имею в виду, что я внес некоторые изменения, но эти изменения не очень актуальны в этом вопросе, и с тех пор обе службы работают без проблем. Пожалуйста, пометьте его как «Закрыто больше не актуально».