如何从lambda创建Quartz.Net作业?
作者:互联网
是否可以通过Quartz.net中的lambda创建作业?
我有很多任务需要运行,我真的想避免必须为每个工作创建几十个类.我不需要任何高级设置,只需要不时地调用一个方法.
scheduler.ScheduleJob(() => DoSomething(a), TimeSpan.FromSeconds(10));
scheduler.ScheduleJob(() => DoAnotherThing(b), TimeSpan.FromSeconds(20));
scheduler.ScheduleJob(() => DoThis(c), TimeSpan.FromHours(2));
scheduler.ScheduleJob(() => DoThat(d), TimeSpan.FromMinutes(30));
...
我会为此创建一个扩展方法,但似乎每个作业都需要使用自己的类型才能创建IJob,这使事情比应该做的要难.
关于如何做到这一点的任何想法?
解决方法:
好的,我缺少参数的jobdata.如果有人需要,我可以使用以下代码完成此操作:
using Quartz;
using System;
namespace MyApp
{
public static class SchedulerExtensions
{
public static DateTimeOffset ScheduleJob(this IScheduler scheduler, Action action, TimeSpan initialDelay, TimeSpan interval)
{
var data = new JobDataMap();
data.Add("_", action);
var jobDetail = JobBuilder.Create<GenericJob>().UsingJobData(data).Build();
var trigger = TriggerBuilder.Create()
.StartAt(DateTimeOffset.UtcNow.Add(initialDelay))
.WithSimpleSchedule(s => s.WithInterval(interval).RepeatForever())
.Build();
return scheduler.ScheduleJob(jobDetail, trigger);
}
class GenericJob : IJob
{
public void Execute(IJobExecutionContext context)
{
(context.JobDetail.JobDataMap["_"] as Action)?.Invoke();
}
}
}
}
标签:quartz-net,c 来源: https://codeday.me/bug/20191026/1935731.html