gpt4 book ai didi

triggers - 如果作业因异常而失败,则在 15 分钟后重新触发quartz.net 触发器

转载 作者:行者123 更新时间:2023-12-02 15:25:40 25 4
gpt4 key购买 nike

我一直在寻找有关如何在作业抛出异常的情况下在一段时间后重新触发作业的答案。我看不到任何简单的方法来做到这一点。

如果我像这样设置触发器:

JobDetail job = new JobDetail("Download catalog", null, typeof(MyJob));
job .Durable = true;
Trigger trigger= TriggerUtils.MakeDailyTrigger(12, 0);
trigger.StartTimeUtc = DateTime.UtcNow;
trigger.Name = "trigger name";
scheduler.ScheduleJob(job , trigger);

MyJob 看起来像这样:

public class MyJob : IJob
{
public void Execute(JobExecutionContext context)
{
var service = new service();


try
{
service.Download();
}
catch (Exception)
{
throw;
}

}
}

如果 service.Download() 调用抛出某种异常,如何在 15 分钟后触发重新触发/重新触发?

最佳答案

实际上,没有必要像LeftyX描述的那样创建一个新的JobDetail。您可以只安排一个从当前上下文连接到 JobDetail 的新触发器。

public void Execute(JobExecutionContext context) {
try {
// code
} catch (Exception ex) {
SimpleTriggerImpl retryTrigger = new SimpleTriggerImpl(Guid.NewGuid().ToString());
retryTrigger.Description = "RetryTrigger";
retryTrigger.RepeatCount = 0;
retryTrigger.JobKey = context.JobDetail.Key; // connect trigger with current job
retryTrigger.StartTimeUtc = DateBuilder.NextGivenSecondDate(DateTime.Now, 30); // Execute after 30 seconds from now
context.Scheduler.ScheduleJob(retryTrigger); // schedule the trigger

JobExecutionException jex = new JobExecutionException(ex, false);
throw jex;
}
}

这比创建新的 JobDetail 更不容易出错。希望有帮助。

关于triggers - 如果作业因异常而失败,则在 15 分钟后重新触发quartz.net 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com