Универсальная функция Quartz.net для добавления в расписание (проблема с типизацией) - PullRequest
0 голосов
/ 19 декабря 2018

Я переключаю все в своем коде с FluentScheduler на Quartz.net и пытаюсь следовать правилу «Не повторяйся».У меня есть куча заданий с одинаковыми именами, но в разных пространствах имен, но все они запускаются с одними и теми же 3 строками с очень незначительными вариациями.Например, у меня есть следующий тип установки:

//BasicSchedule is an IJob
//Run() is public virtual Task Run(IJobExecutionContext context) 
MyApp.Option1.BasicSchedule.Run();
MyApp.Option2.BasicSchedule.Run();
MyApp.Option3.BasicSchedule.Run();

Я создал функцию, и я не уверен, возможно ли использовать ее повторно, поместив ее на уровне MyApp или я должен простоскопируйте функцию в каждое Option пространствоПри этом мне трудно понять, как добавить задание, потому что JobBuilder.Create<> ожидает задание.

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

public static void AddCurrentScheduleItem(string JobName, int RepeatDelay) {
         IJobDetail Job = JobBuilder.Create<(Task<T>)JobName>().WithIdentity(JobName).Build();
        ITrigger Trigger = TriggerBuilder.Create().WithIdentity(JobName).WithSimpleSchedule(x => x.WithIntervalInMinutes(RepeatDelay).RepeatForever()).Build();
        await Config.CurrentSchedule.ScheduleJob(Job, Trigger);

}

Для справки, рабочий путь такой:, но я должен повторить эти 3 строки для каждой работы.

IJobDetail Job1= JobBuilder.Create<Job1>().WithIdentity("Job1").Build();
ISimpleTrigger Job1Trigger = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("Job1").StartAt(StartNow).ForJob("Job1").Build();
await Config.CurrentSchedule.ScheduleJob(Job1, Job1Trigger);
...