首页 > 解决方案 > 每 30 分钟重复一次 Quarz.Net 作业……只在第一次工作

问题描述

我对 Quartz.Net 很陌生(过去我使用 Cron sintax 设置它每次运行一次)。

这次我需要有一个每 30 分钟执行一次的重复任务。

它只执行一个。

这是我到目前为止所做的

 public class Core : ICore
{
    private IScheduler scheduler;
    private readonly IConfiguration configuration;
    private static readonly TimeSpan defaultInterval = new TimeSpan(0,1,0);

    public Core(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    public async Task StartAsync()
    {
        var interval = configuration.GetValue("interval", defaultInterval);
        // Grab the Scheduler instance from the Factory
        NameValueCollection props = new NameValueCollection
        {
            { "quartz.serializer.type", "binary" }
        };
        StdSchedulerFactory factory = new StdSchedulerFactory(props);
        this.scheduler = await factory.GetScheduler();

        this.scheduler.JobFactory =new SimpleInjectorJobFactory(ContainerWrapper.Container, Assembly.GetExecutingAssembly());

        IJobDetail job = JobBuilder.Create<RinnovoJob>()
            .WithIdentity("RinnovoJob", "sender").StoreDurably(true)
            .Build();



        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity($"trigger_RinnovoJob", "sender")
            .StartNow().WithSimpleSchedule(x=>x.WithInterval(interval))
            .Build();

        // Tell quartz to schedule the job using our trigger
        await this.scheduler.ScheduleJob(job, trigger);

        // and start it off
        await this.scheduler.Start();
    }

    public void Dispose()
    {

    }
}

这就是工作

 public class RinnovoJob:IJob
{
    [omiss]

    public RinnovoJob([omiss])
    {
        [omiss]
    }

    public Task Execute(IJobExecutionContext context)
    {
      log.Info("Passed");

      return Task.CompletedTask;

    }
}

它只写一次“通过”。我已经阅读了文档以将 Durability 设置为 true,因为我已经使用过,StoreDurably(true)但它似乎不起作用。

有什么建议吗?另一个问题,如果有一个相同类型的作业正在运行,有没有办法可以避免执行作业?

提前致谢

标签: quartz.net

解决方案


我已经成功了...我错过了.RepeatForever()电话

这是工作代码

ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity($"trigger_RinnovoJob", "sender")
            .StartNow().WithSimpleSchedule(x=>x.WithInterval(interval).RepeatForever())
            .Build();

希望这可以帮助其他在类似情况下浪费时间的人


推荐阅读