我将代码中的所有内容从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);