Я использовал Quartz.Net в сервисе WCF, и он работал очень хорошо, он обладает большой гибкостью благодаря триггерам Cron, в основном вы можете отработать большинство сценариев планирования, когда вы планируете триггер, вынужно указать тип класса, который реализует интерфейс IJob.В моем случае методы Execute вызывают одноэлементный класс / метод, чтобы выполнить работу, которую он должен выполнить.Вы можете настроить триггеры так, чтобы они хранились в ОЗУ (энергозависимой) или базе данных, я думаю, что вы можете указать пользовательское хранилище, но я не пошел по этому пути.
Единственная проблема, с которой я столкнулся в Quartz.NET, описана в этом вопросе . Я также опубликовал решение, которое разработал, если у вас есть более конкретные вопросы, пожалуйста, дайте мне знать.
Это некоторые основы конфигурации Quartz.NET, которые в основном следуют из учебника
. Для создания экземпляра планировщика вы делаете что-то вроде этого:
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
_scheduler.Start()
Для планирования заданиявы будете делать что-то вроде этого
JobDetail jobDetail = new JobDetail("UNIQUE NAME", null, typeof(NotepadJob));
SimpleTrigger triggerToReturn = new SimpleTrigger();
triggerToReturn.StartTimeUtc = DateTime.Now.ToUniversalTime();
_scheduler.ScheduleJob(jobDetail,trigger);
, и задание будет выглядеть примерно так
internal class NotepadJob : IJob
{
//Open Notepad
}
Если при работе с SQL вы можете настроить параметры, как указано в файле конфигурации:
<configSections>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<\configSections>
<quartz>
<add key="quartz.scheduler.instanceName" value="DefaultQuartzJobScheduler" />
<add key="quartz.scheduler.instanceId" value="AUTO" />
<add key="quartz.jobstore.clustered" value="true" />
<add key="quartz.jobstore.clusterCheckinInterval" value="15000" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.jobStore.useProperties" value="false" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.dataSource.default.connectionString" value="[CONNECTION STRING]" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
<add key="quartz.threadPool.threadCount" value="10" />
</quartz>
-Regards