1、Quartz.Net项目地址
源码地址:https://github.com/quartznet/quartznet
2、使用Nuget引用Quartz.NET
1)可以在Nuget包管理器中搜索 "Quartz",找到Quartz点击 "安装"
2)在Nuget包管理控制台使用下面命令安装引入
Install-Package Quartz
3)Quartz中使用的命名空间
using Quartz;
using Quartz.Impl;
2、使用Quartz.NET实现定时任务示例代码
IScheduler:与调度程序进行交互的主要API。
IJob:由您希望由调度程序执行的组件实现的接口。
IJobDetail:用于定义Jobs的实例。
ITrigger:定义将在其上执行给定Job的计划的组件。
JobBuilder:用于定义/构建JobDetail实例,该实例定义Jobs实例。
TriggerBuilder:用于定义/构建触发器实例。
1)实现IJob接口
[DisallowConcurrentExecution] public class MessageJob : IJob { private static Logger logger = LogManager.GetCurrentClassLogger(); public Task Execute(IJobExecutionContext context) { //Console.WriteLine("Info From HelloJob"); //Thread.Sleep(30000); //LogHelper.WriteInfo("Info From HelloJob"); return Task.Run(() => { logger.Info("MessageJob Start"); try { Utils.NotifyMsg(); } catch (Exception ex) { logger.Error(ex.Message); } }); } }
DisallowConcurrentExecution:禁止相同JobDetail同时执行,而不是禁止多个不同JobDetail同时执行。建议加上该特性,防止由于任务执行时间太长,长时间占用资源,导致其它任务堵塞。
2)使用Quartz.NET示例代码
// 构造一个调度器工厂 NameValueCollection props = new NameValueCollection { { "quartz.serializer.type", "binary" } }; StdSchedulerFactory factory = new StdSchedulerFactory(props); // 得到一个调度器 IScheduler sched = await factory.GetScheduler(); await sched.Start(); // 定义作业并将其绑定到HelloJob类 IJobDetail job = JobBuilder.Create<MessageJob>() .WithIdentity("myJob", "group1") .Build(); // 触发作业现在运行,然后每40秒运行一次 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(40) .RepeatForever()) .Build(); await sched.ScheduleJob(job, trigger);
相关文档:
.NET Core Quartz使用cron表达式实现定时任务
.NET Core(C#) System.timers.timer使用实现定时任务及示例代码
.NET Core(C#) System.Threading.timer使用实现定时任务及示例代码