如何使用FluentScheduler将作业从周一安排到周五
本文关键字:周一安 周五 作业 何使用 FluentScheduler | 更新日期: 2023-09-27 18:04:32
我需要安排一个作业,仅在周一至周五上午9:00,下午12:00和下午5:00运行。没有找到任何关于FluentScheduler的文档。
我可以通过拥有多个(分别为5天)工作时间表来做到这一点,但我们可以在给定的时间和天数内重复使用单个时间表吗?
我本以为最简单的解决方案是让IJob中的Execute()方法在其入口点检查一周的日期,并在周六或周日立即退出…
您可以使用Weekdays
,即
var schedule = Schedule(yourJob);
schedule.ToRunEvery(0).Weekdays().At(9, 0);
schedule.ToRunEvery(0).Weekdays().At(12, 0);
schedule.ToRunEvery(0).Weekdays().At(17, 0);
ToRunEvery(0)
意味着我们现在需要开始。
ToRunEvery(1)
将在第一次执行时等待一个间隔-在我们的例子中是1个工作日。
我遇到了同样的问题。FluentScheduler不够健壮,无法处理非常复杂的调度。更好的解决方案是使用http://www.quartz-scheduler.net/。它非常灵活,由Topshelf支持,并且支持大多数IoC容器。例如,在我的服务中,我使用:
config.Service<Service>(sc =>
{ sc.ScheduleQuartzJob(configurator =>
configurator.WithJob(
() => JobBuilder.Create<DataLoadJob>().WithIdentity("DataLoad", "Job1").Build())
.AddTrigger(() => TriggerBuilder.Create().WithIdentity("DataLoadSchedule", "Job1")
.WithSimpleSchedule(builder => builder.WithIntervalInSeconds(10).RepeatForever()).Build()));
sc.ScheduleQuartzJob(configurator =>
configurator.WithJob(
() => JobBuilder.Create<DataMergeJob>().WithIdentity("DataMerge", "Job1").Build())
.AddTrigger(() => TriggerBuilder.Create().WithIdentity("DataMergeSchedule", "Job1")
.WithCronSchedule("0 30 7-20/3 ? * MON-FRI").Build()));
sc.ConstructUsingSimpleInjector();
sc.WhenStarted((s, h) => s.Start(h));
sc.WhenStopped((s, h) => s.Stop(h));
});
这是一个使用SimpleInjector和Quartz的Topshelf服务的片段。
public class Example: Registry
{
public Example()
{
Schedule(() =>
{
DayOfWeek[] available = new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday };
if (DateTime.Now.DayOfWeek.IsOn(available) && (DateTime.Now.Hour == 8 && DateTime.Now.Minute == 0))//etc
{
//code
}
}).WithName("Example").ToRunEvery(0).Hours().At(0).Between(8, 0, 17, 0);
}
}