当前位置: 首页 > news >正文

C# Quartz.net 定时任务

Quartz.net 定时任务

  • 官网
    • 安装
    • 主要成员
      • Job
      • Trigger
      • eduler
    • 示例:
    • Scheduler简介
    • 框架核心接口
    • Job
    • Trigger
    • JobDataMap
      • 示例代码如下:
      • Trigger
        • 示例代码如下

官网

https://www.quartz-scheduler.net/documentation/quartz-3.x/how-tos/one-off-job.html

安装

install-package quartz

主要成员

Job

Job是具体的业务逻辑所在,是定时任务中要执行的那一项任务

Trigger

Trigger触发器,规定了定时任务的执行时间、频率、次数

eduler

Scheduler调度器将Job和Trigger关联起来,负责整个定时任务的开启、关闭

示例:

class Program{public static async Task Main(string[] args){ISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler=await schedulerFactory.GetScheduler();//创建schedulerawait scheduler.Start();//启动schedulerIJobDetail job = JobBuilder.Create<TestJob>().WithIdentity("testJob", "testGroup").Build();//创建job(jobdetail)ITrigger trigger = TriggerBuilder.Create().WithIdentity("testTrigger", "testGroup").StartNow().WithSimpleSchedule(x=>x.WithIntervalInSeconds(10).RepeatForever()).Build();//创建trigger 现在开始 每10秒执行一次  无限重复await scheduler.ScheduleJob(job, trigger);//scheduler关联trigger和jobConsole.ReadLine();}}public class TestJob : IJob{public async Task Execute(IJobExecutionContext context){//定时job的执行内容await Task.Run(()=>{ Debug.WriteLine("testJob");});}}

Scheduler简介

官方提供了实现类StdSchedulerFactory

实例化一个Scheduler以后,Scheduler可以:

Start:开始定时任务,定时触发任务执行

待机:暂停,触发器也不会启动

Shutdown:停止调度器,不会在定时触发执行任务

框架核心接口

  • IScheduler 操作Scheduler的核心api。
  • IJob 业务逻辑所在地!要实现接口的Excute方法。
  • IJobDetail 用来实例化Job的!
  • ITrigger 一个job可以对应多个trigger,但是一个trigger只能对应一个job!所有trigger都实现该接口。
  • JobBuilder 用来创建JobDetail实例(JobDetail再创建Job实例)。
  • TriggerBuilder 用来创建Trigger实例。而且我们可以看到示例代码中的方法级联(流式接口)。
  • SchedulerBuilder 用来创建Scheduler实例。

Job

定时任务只需要继承IJob就可以了,然后必须要实现Execute方法

public class TestJob : IJob{public async Task Execute(IJobExecutionContext context){await Task.Run(()=>{ Debug.WriteLine("testJob");});}}

Trigger

Trigger可以包含JobDataMap参数,最常用的Trigger是

  1. SimpleTrigger (实现ISimpleTrigger接口)包含常用的方法,常用的定时任务大都可以实现

  2. CronTrigger (实现ICronTrigger接口) 主要是可以使用Cron表达式,来实现复杂的触发方式(当然简单的也可以)

JobDataMap

IJobDetail有一个JobDataMap属性,可以用来往Job里面传参。

设置参数:IJobDetail的UsingJobData

获取参数:IJobExecutionContext的JobDetail.JobDataMap属性的GetString(GetInt等等)方法

示例代码如下:

 class Program{public static async Task Main(string[] args){ISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler=await schedulerFactory.GetScheduler();await scheduler.Start();IJobDetail job = JobBuilder.Create<TestJob>().WithIdentity("testJob", "testGroup").UsingJobData("stringParam","hello job").UsingJobData("numberParam",2020).Build();ITrigger trigger = TriggerBuilder.Create().WithIdentity("testTrigger", "testGroup").StartNow().WithSimpleSchedule(x=>x.WithIntervalInSeconds(10).RepeatForever()).Build();await scheduler.ScheduleJob(job, trigger);Console.ReadLine();}}public class TestJob : IJob{public async Task Execute(IJobExecutionContext context){JobDataMap jobParam= context.JobDetail.JobDataMap;string paramStr= jobParam.GetString("stringParam");int paramNo = jobParam.GetInt("numberParam");await Console.Out.WriteLineAsync("paramStr=" + paramStr + ",paramNo=" + paramNo);}}

Trigger

Trigger也可以使用UsingJobData,使用场景是:

多个Trigger来触发同一个Job,不同的Trigger需要传不同的参数

示例代码如下
class Program{public static async Task Main(string[] args){ISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler=await schedulerFactory.GetScheduler();await scheduler.Start();IJobDetail job = JobBuilder.Create<TestJob>().WithIdentity("testJob", "testGroup").Build();ITrigger trigger = TriggerBuilder.Create().WithIdentity("testTrigger", "testGroup").UsingJobData("stringParam", "hello trigger").UsingJobData("numberParam", 2021).StartNow().WithSimpleSchedule(x=>x.WithIntervalInSeconds(10).RepeatForever()).Build();await scheduler.ScheduleJob(job, trigger);Console.ReadLine();}}public class TestJob : IJob{public async Task Execute(IJobExecutionContext context){JobKey key = context.JobDetail.Key;//测试获取JobDetail的JobKey(JobBuilder设置的)JobDataMap jobParam = context.MergedJobDataMap;//获取Trigger设置的JobDataMapstring paramStr= jobParam.GetString("stringParam");int paramNo = jobParam.GetInt("numberParam");await Console.Out.WriteLineAsync("key="+key+",paramStr=" + paramStr + ",paramNo=" + paramNo);//key=testGroup.testJob,paramStr=hello trigger,paramNo=2021}}
http://www.lqws.cn/news/475345.html

相关文章:

  • c# .netCreateLinkedTokenSource链接令牌,取消信号异步执行
  • 二、海思网卡数据流程
  • 多源异构数据接入与实时分析:衡石科技的技术突破
  • 虚拟与现实交融视角下定制开发开源AI智能名片S2B2C商城小程序赋能新零售商业形态研究
  • 【node】Mac m1 安装nvm 和node
  • Vulkan 学习笔记15—Mipmap 与多重采样
  • Vue3+TypeScript+Element Plus 表格展开行优化方案
  • MongoDB:索引
  • 【机器学习的五大核心步骤】从零构建一个智能系统
  • Linux 服务器运维:磁盘管理与网络配置
  • go excel解析库xuri/excelize中的SAX
  • LLMs之Embedding:Qwen3 Embedding的简介、安装和使用方法、案例应用之详细攻略
  • 【weaviate】分布式数据写入之LSM树深度解析:读写放大的权衡
  • 数据库(1)-SQL
  • webpack+vite前端构建工具 -6从loader本质看各种语言处理 7webpack处理html
  • 案例:塔能科技以“数字光网”重塑某市照明绿色生态
  • Docker 运行RAGFlow 搭建RAG知识库
  • LeapMotion-PhysicalHandsManager 类详解
  • 7.5.1散列表的基本概念
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • 深入解析Flink Local模式启动流程源码:揭开作业初始化的神秘面纱
  • vue3 el-table 行颜色根据 字段改变
  • 企业级安全实践:SSL 加密与权限管理(二)
  • python 常见数学公式函数使用详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)
  • swift-17-字面量协议、模式匹配、条件编译
  • Java 21 的虚拟线程与桥接模式:构建高性能并发系统
  • Kafka Streams入门与实战:从概念解析到程序开发
  • 架构总结记录
  • VSCode性能调优:从卡顿到丝滑的终极方案