博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Quartz.Net同时执行多个任务
阅读量:4959 次
发布时间:2019-06-12

本文共 3159 字,大约阅读时间需要 10 分钟。

在Quartz.Net中可能我们需要在某一时刻执行多个任务操作,而又不想创建多个任务。Quartz.Net为我们提供了多个ScheduleJob的重载来实现多个一次执行多个任务。

1 // 创建一个组任务的触发器,如果某个给定的任务或触发器已经存在(Job.Key不唯一)和replace为false时,就会抛出异常2 void ScheduleJob(IJobDetail jobDetail, ISet
triggersForJob, bool replace);

利用这个方法可以创建一组任务来同时执行。

首先创建一个任务调度类:SystemScheduler。将创建好的每个任务设置好key之后加入到触发器组中

1 public class SystemScheduler 2     { 3         public static SystemScheduler CreateInstance() 4         { 5             return new SystemScheduler(); 6         } 7  8         private IScheduler _scheduler; 9 10         public void StartScheduler()11         {12             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();13             _scheduler = schedulerFactory.GetScheduler();14 15             // 读取所有任务16             var jobs = Job.ReadJobs();17             if (jobs != null && jobs.Any())18             {19                 // 创建一个触发器组对象20                 Quartz.Collection.ISet
triggers = new Quartz.Collection.HashSet
();21 22 //创建一个Job来执行特定的任务23 IJobDetail jobDetail = new JobDetailImpl("SettingHandler", typeof(SettingHandler));24 25 foreach (var job in jobs)26 {27 // 设置触发器key28 TriggerKey key = new TriggerKey(job.Key);29 30 //创建并定义触发器的规则(每天执行一次时间为:时,分)31 ITrigger trigger =32 TriggerBuilder.Create().WithIdentity(key)33 .WithDailyTimeIntervalSchedule(34 a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(job.Hour, job.Minute))).Build();35 triggers.Add(trigger);36 }37 _scheduler.ScheduleJob(jobDetail, triggers, true);38 39 //开始40 _scheduler.Start();41 }42 }43 44 ///
45 /// 停止任务46 /// 47 public void StopScheduler()48 {49 _scheduler.Shutdown();50 }51 }
View Code

创建任务处理类SettingHandler来执行任务:

public class SettingHandler : IJob    {        public void Execute(IJobExecutionContext context)        {            LogWriter.ToInfo(string.Format("{0} 开始执行设置CU任务", DateTime.Now.ToString()));            try            {                UpdateTs.UpdateDt = DateTime.Now;                List
jobs = Job.ReadJobs(); string jobKey = context.Trigger.Key.Name; // 获取任务 var job = jobs.FirstOrDefault(a => a.Key.Equals(jobKey)); if (job != null) { LogWriter.ToInfo("执行了一次任务:key=" + jobKey); // 任务处理逻辑 } } catch (Exception ex) { LogWriter.ToError("执行更新CU错误", ex); } } }
View Code

最后启动任务调度程序

private void Form1_Load(object sender, EventArgs e)  {      SystemScheduler systemScheduler = SystemScheduler.CreateInstance();      systemScheduler.StartScheduler();  }

 

转载于:https://www.cnblogs.com/learn-dotnet/p/5519041.html

你可能感兴趣的文章
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>