远荣软件

yuanrongruanjian


Quartz.NET 调度公共类

<h3>一、使用方法</h3> <ol> <li> <p>安装Quartz包 PM&gt; Install-Package Quartz -Version 2.6.2</p> </li> <li>构建执行任务 <pre><code class="language-csharp">public class TaskReadData : IJob { public void Execute(IJobExecutionContext context) { //将要定时执行的逻辑代码写于此处 Console.WriteLine(DateTime.Now.ToString() + "\t工作太久了,休息一下吧。\n"); } }</code></pre></li> <li>调用示例</li> </ol> <pre><code class="language-csharp">var task = new QuartzTask(); // 每小时重新连接一次 PLC task.Appand&lt;TaskConnect&gt;(x =&gt; x.WithCalendarIntervalSchedule(y =&gt; y.WithIntervalInHours(1))); // 5秒中读取一次数据 task.Appand&lt;TaskReadData&gt;(5, IntervalUnit.Second); // 1分钟上传一次数据到总服务器 task.Appand&lt;TaskUpData&gt;(1, IntervalUnit.Minute); // 每分钟上传一次数据 //task.Appand&lt;TaskUpData&gt;(x=&gt;x.WithCronSchedule("0 0/1 * * * ? *")); task.Start(); bool isStarted = task.Scheduler.IsStarted; Log.WriteLog("-------------------计划程序已启动-----------------------");</code></pre> <h3>二、调度公共类</h3> <pre><code class="language-csharp">#region Information /* * ================================================================= * Copyright(c) 2018 *****,All Rights Reserved. * Author: hunter * Date: 2018/10/24 20:23:09 * Version: 1.0.0 * ================================================================= */ #endregion using Quartz; using Quartz.Impl; using System; namespace AcquisitionSystem.Code.Quartz { /// &lt;summary&gt; /// 提供一个调度作业工具,不能被继承。 /// &lt;/summary&gt; public sealed class QuartzTask { /// &lt;summary&gt; /// 定义调度器。 /// &lt;/summary&gt; public IScheduler Scheduler { get; set; } /// &lt;summary&gt; /// 创建调度器。 /// &lt;/summary&gt; public QuartzTask() { /* * 通过 StdSchedulerFactory 获取到调度工厂 ISchedulerFactory, * 通过调度工厂的 GetScheduler 方法获取到一个调度器 scheduler 。 * 初始化调度器 scheduler 之后, 就可以启动、 备用、 关闭。 */ ISchedulerFactory sf = new StdSchedulerFactory(); // IScheduler:调度器交互的主要接口。 Scheduler = sf.GetScheduler(); } /// &lt;summary&gt; /// 启动调度器。 /// &lt;/summary&gt; public void Start() { Scheduler.Start(); } /// &lt;summary&gt; /// 停止调度器。 /// &lt;/summary&gt; public void Stop() { Scheduler.Shutdown(); } /// &lt;summary&gt; /// 将作业追加到调度器中。 /// &lt;/summary&gt; /// &lt;typeparam name="T"&gt; 需要追加的作业类。&lt;/typeparam&gt; /// &lt;param name="triggerDdefine"&gt; 自定义设置 TriggerBuilder 相关属性。 &lt;/param&gt; public void Appand&lt;T&gt;(Action&lt;TriggerBuilder&gt; triggerDdefine) where T : IJob { var jobDetail = CreateJobDetail&lt;T&gt;(); var trigger = CreateTrigger(triggerDdefine); Scheduler.ScheduleJob(jobDetail, trigger); } /// &lt;summary&gt; /// 将作业追加到调度器中。 /// &lt;/summary&gt; /// &lt;typeparam name="T"&gt; 需要追加的作业类。&lt;/typeparam&gt; /// &lt;param name="interval"&gt; 重复的间隔时间。&lt;/param&gt; /// &lt;param name="unit"&gt; 时间间隔单位。&lt;/param&gt; public void Appand&lt;T&gt;(int interval, IntervalUnit unit) where T : IJob { var jobDetail = CreateJobDetail&lt;T&gt;(); var trigger = CreateTrigger(interval, unit); Scheduler.ScheduleJob(jobDetail, trigger); } /// &lt;summary&gt; /// 将作业追加到调度器中。 /// &lt;/summary&gt; /// &lt;typeparam name="T"&gt; 需要追加的作业类。&lt;/typeparam&gt; /// &lt;param name="hour"&gt; 每天的时间 0 到 23 之间。&lt;/param&gt; /// &lt;param name="minute"&gt; 每天的时间 0 到 59 之间。&lt;/param&gt; /// &lt;param name="second"&gt; 每天的时间 0 到 59 之间。&lt;/param&gt; public void Appand&lt;T&gt;(int hour, int minute, int second) where T : IJob { var jobDetail = CreateJobDetail&lt;T&gt;(); var trigger = CreateTrigger(hour, minute, second); Scheduler.ScheduleJob(jobDetail, trigger); } /// &lt;summary&gt; /// 创建作业。 /// &lt;/summary&gt; /// &lt;typeparam name="T"&gt; 需要创建的作业类。&lt;/typeparam&gt; /// &lt;returns&gt; 返回创建成功的具体作业。&lt;/returns&gt; private static IJobDetail CreateJobDetail&lt;T&gt;() where T : IJob { /* * JobBuilder:定义 JobDetail 实例 * IJobDetail:定义 Job 实例及其它相关的静态信息 */ return JobBuilder.Create&lt;T&gt;().Build(); } /// &lt;summary&gt; /// 创建触发器 。 /// &lt;/summary&gt; /// &lt;param name="triggerDefine"&gt; 自定义设置 TriggerBuilder 相关属性。&lt;/param&gt; private static ITrigger CreateTrigger(Action&lt;TriggerBuilder&gt; triggerDefine) { //创建触发器实例。 var trigger = TriggerBuilder.Create(); if (triggerDefine != null) triggerDefine(trigger); return trigger.Build(); } /// &lt;summary&gt; /// 创建触发器 。 /// &lt;/summary&gt; /// &lt;param name="interval"&gt; 重复的间隔时间。&lt;/param&gt; /// &lt;param name="unit"&gt; 时间间隔单位。&lt;/param&gt; private static ITrigger CreateTrigger(int interval, IntervalUnit unit) { // 创建触发器实例。 var trigger = TriggerBuilder.Create() .WithCalendarIntervalSchedule(x =&gt; x.WithInterval(interval, unit)) .Build(); return trigger; } /// &lt;summary&gt; /// 创建触发器 。 /// &lt;/summary&gt; /// &lt;param name="hour"&gt; 每天的时间 0 到 23 之间。&lt;/param&gt; /// &lt;param name="minute"&gt; 每天的时间 0 到 59 之间。&lt;/param&gt; /// &lt;param name="second"&gt; 每天的时间 0 到 59 之间。&lt;/param&gt; private static ITrigger CreateTrigger(int hour, int minute, int second) { // 创建触发器实例。 var trigger = TriggerBuilder.Create() .WithDailyTimeIntervalSchedule( x =&gt; x.StartingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(hour, minute, second)).WithRepeatCount(1) ) .Build(); return trigger; } } }</code></pre>

页面列表

ITEM_HTML