C # Windows Service прерывистый вызов метода - PullRequest
0 голосов
/ 16 апреля 2010

Сценарий

У меня есть служба Windows C #, которая, по сути, подписывается на некоторые события и, если что-то запускается событиями, выполняет несколько задач.

Вещь ...

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

Вопрос

Как лучше всего выполнить эту задачу в точное время?

Мысли на данный момент таковы:

1) Использовать таймер, который проверяет, который час, каждые несколько минут. 2) То, что не является таймером и не отстой в качестве реализации.

Помощь с благодарностью.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2010

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

Затем ваша служба может постоянно опрашивать, чтобы убедиться, что процессы запущены, а если нет, то запустить их.

Все еще вроде "timer-y" предоставлено, но это другой подход.

0 голосов
/ 16 апреля 2010

Начать новый поток при запуске службы с IsBackground = true. Это гарантирует, что ваш поток умирает, когда ваша служба останавливается, так что вы можете просто запустить его и забыть.

В потоке используйте бесконечный цикл с Thread.Sleep (60 * 1000), ожидая правильного времени суток для перезапуска. Вероятно, перезапуск должен быть выполнен в новом потоке с IsBackground = false, чтобы предотвратить остановку службы до того, как завершится перезапуск приложения (ограничено 30 секундами или около того разрешено Windows для остановки службы). В качестве альтернативы вы можете запустить отдельный процесс для операции перезапуска.

0 голосов
/ 16 апреля 2010

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

while (!closing)
{
if (SomethingNeedsDoingNow()) { DoIt(); }

Thread.Sleep(1);
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...