У меня есть приложение службы С#, которое взаимодействует с базой данных. Он был недавно перенесен с .NET 2.0 на .NET 4.0, поэтому есть много новых инструментов, которые мы могли бы использовать.
Я ищу указатели на подходы к программированию или инструменты/библиотеки для обработки заданий, настройки задач, от которых они зависят, очереди, приоритизации, отмены и т.д.
Существуют различные виды услуг:
- Данные (для извлечения и обновления)
- Вычисление (заполнение некоторой таблицы результатами расчета данных)
- Отчеты
Эти службы часто зависят друг от друга и запускаются по требованию, т.е. задача Отчетность, вероятно, будет содержать в себе код, например
if (IsSomeDependentCalculationRequired())
PerformDependentCalculation(); // which may trigger further calculations
GenerateRequestedReport();
Кроме того, любая модификация Данные скорее всего установит флаг Required
для некоторых служб Расчет или Отчеты (так что отчет может быть устаревшим до его завершения). Задачи варьируются от нескольких секунд до нескольких минут и выполняются в транзакциях.
До сих пор это работало нормально, но оно недостаточно масштабируется. Есть фундаментальные проблемы с дизайном, и я хочу переписать эту часть кода. Например, если два пользователя запросят один и тот же отчет в одинаковые моменты времени, зависимые задачи будут выполняться дважды. Кроме того, в настоящее время нет способа отменить выполняемую задачу. Трудно поддерживать зависимые задачи и т.д.
Я НЕ ищу предложения о том, как реализовать исправление. Скорее, я ищу указатели на то, какие инструменты/библиотеки я буду использовать для такого требования, если я начинаю с .NET 4 с нуля. Будет ли это хорошим кандидатом для Рабочий процесс Windows? Это то, что для Фьючерсы? Есть ли какие-нибудь другие библиотеки, на которые я должен смотреть, или книги или записи в блогах, которые я должен прочитать?
Изменить: Как насчет Rx Reactive Extensions?