我想在Quartz.Net中重复一个Job,直到它正确完成。我试过这样的事情:
using Common.Logging;
using Quartz;
using System;
using System.Threading.Tasks;
namespace MyNamespace
{
[DisallowConcurrentExecution]
public class ExampleJob : IJob
{
private readonly ILog _log = LogManager.GetLogger(typeof(ExampleJob));
public Task Execute(IJobExecutionContext context)
{
ISimpleTrigger trigger = (ISimpleTrigger)context.Trigger;
try
{
var myTask = new Task(() =>
{
_log.Info("Starts " + context.JobDetail.Key.Name);
if (trigger.TimesTriggered < 3)
{
_log.Info("I'm going to fail " + trigger.TimesTriggered + " " + context.JobDetail.Key.Name);
throw new NotImplementedException();
}
_log.Info("Success! " + trigger.TimesTriggered + " " + context.JobDetail.Key.Name);
});
myTask.Start();
return myTask ;
}
catch(Exception exc)
{
throw new JobExecutionException(exc) {RefireImmediately = true};
}
}
}
}
有了这个简单的触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger, "group")
.StartNow()
.Build();
它应该在“成功!”时停止。执行日志语句,并在失败时重复。我也尝试过this,但它不适用于Quartz.Net 3.有什么想法吗?