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


推荐文档