开发手册 欢迎您!
软件开发者资料库

.NET Core(C#) Quartz.NET实现定时任务的方法及示例代码

.NET Core(C#)中除了使用System.Timers.Timer和System.Threading.Timer实现定时任务,还可以使用Quartz.NET框架,通过cron表达式等方式实现定时任务,本文主要介绍.NET Core(C#)中,使用Quartz.Net实现定时任务的方法及示例代码。

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()    .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使用实现定时任务及示例代码