2012-04-26 3 views
2

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

Есть правила, как:

  • запуска таймера А каждый день в 9 утра

  • запуска таймера B каждый 2мин

  • если таймер А начал не начинает любой другой таймер

  • Таймеры C и D не могут работать одновременно

Я посмотрел на Quartz.net, потому что у него были первые 2 требования нашего списка, но он не обрабатывает никаких правил параллелизма.

Есть ли какие-либо рамки, на которые я мог бы взглянуть?

+0

Не ответ, но Quartz.NET неплохой. Было бы довольно тривиально реализовать правила параллелизма самостоятельно. –

+0

Моя любимая вещь о квартете - это то, что вы можете использовать формат crontab, чтобы описать ваши тайминги, с которыми я знаком: http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger –

ответ

2

У меня были аналогичные требования: в основном вам нужен конечный автомат, который можно легко сериализовать на диск или базу данных, каким-то образом легко указать конечный автомат с использованием иерархических состояний, чтобы легко определить временные события (После, Каждые, В) и каким-то образом легко узнать, когда загружать состояние машины обратно в память, чтобы перейти в состояние, основанное на текущем времени.

В конце концов я написал свой собственный автомат, так как не нашел того, который отвечал моим требованиям, в частности временным событиям и требованиям к сериализации. Вы можете получить исходный код в Nuget Package. Запись в блоге here. Обратная связь приветствуется.

Смежные вопросы