Quartz.net - 自定义时间内的触发器

时间:2012-03-22 17:03:00

标签: c# .net quartz-scheduler quartz.net

我有一组日期时间(大约5000个元素),并希望在每个日期时间上执行作业。 数组中的日期时间是自定义的,而不是定期的,所以我不能使用CronTrigger和其他人。 有没有一种简单的方法来创建一个触发器,它会在给定的时间内触发? 是的,我知道每次完成工作后我都可以开始一个新的简单触发器(一次点火,没有重复),但这样对我来说不方便。

2 个答案:

答案 0 :(得分:1)

您可以编写自己的触发器并使用它来执行您的工作。如果您使用的是v1.0,则必须创建一个扩展Trigger的类。有关详细信息,请查看docs。如果您运行的是v2.0,则需要扩展AbstractTrigger

答案 1 :(得分:0)

您可以自定义触发器的日期时间。简单触发器将从您的自定义时间触发n次

public class JobScheduler
    {
       public static void Start()
       {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sched = sf.GetScheduler();
            DateTime[] Jobtime = new DateTime[5]; //Array Have Job time
            startDate[0] = new DateTime(2015, 6, 3, 16, 57, 0);
            startDate[1] = new DateTime(2015, 6, 3, 16, 59, 0);
            startDate[2] = new DateTime(2015, 6, 3, 17, 1, 0);
            startDate[3] = new DateTime(2015, 6, 3, 17, 4, 0);

            for (int i = 1; i < Jobtime.Count(); i++)
        {

            sched.Start();


            string strjob = "job" + i.ToString();
            string strgroup = "group" + i.ToString();
            string strtigger = "trigger" + i.ToString();

            IJobDetail job = JobBuilder.Create<EmailJob>()
                .WithIdentity(strjob, strgroup)
                .Build();
            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()

                .WithIdentity(strtigger, strgroup)
                .StartAt(Jobtime[i])

                .Build();

            sched.ScheduleJob(job, trigger);

        }

       }
    }