如何重复作业直到Quartz.Net完成

问题描述 投票:0回答:1

我想在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.有什么想法吗?

c# quartz.net
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.