1

我需要安排作业仅在周一至周五的上午 9:00、下午 12:00 和下午 5:00 运行。没有找到关于FluentScheduler的任何文档。

我可以通过有多个(分别为 5 天)工作时间表来做到这一点,但我们可以有一个时间表在给定的时间和日期重复执行此操作吗?

4

4 回答 4

0

我遇到了同样的问题。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 服务的片段。

于 2016-11-28T17:39:20.567 回答
0

我原以为最简单的解决方案是让 IJob 中的 Execute() 方法在其入口点检查一周中的哪一天,并在周六或周日立即退出...

于 2016-12-05T14:00:34.160 回答
0

你可以使用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 周。

于 2019-09-30T11:18:26.233 回答
0
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);
    }
}
于 2019-06-26T21:40:55.373 回答