C#测试控制台程序调用Quartz.NET的基本用法

embedded/2024/11/13 15:47:53/

  Quartz.Net是常用的任务调用框架之一,既能在客户端程序中使用,也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。
  VS2022新建控制台项目,在Nuget包管理器中搜索并安装Quartz包,如下所示:

在这里插入图片描述
  Quartz.NET最基本的三个对象,调度器、触发器及作业。其中:
  1)调度器(Scheduler):用于保存并运行作业;
  2)触发器(Trigger):定义作业的运行规则,一次性、周期性调用等;
  3)作业(Job):需要一次性或周期性执行的操作,需要集成IJob接口,实现其中的Execute函数,从参考文献4的示例来看,一个作业匹配一个触发器,调度器支持调度带不同触发器的作业集合。

  定义MyJob 作业类,支持生成随机数并计算其和后打印到控制台,代码如下所示:

public class MyJob : IJob
{public Random m_random = new Random();public Task  Execute(IJobExecutionContext context){int a = m_random.Next(0,100);int b = m_random.Next(0, 100);Console.WriteLine($"{DateTime.Now.ToString()}:{a} + {b} = {a + b}");return default;}
}

  对着参考文献4,创建调度器示例:/font>

StdSchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = await sf.GetScheduler();

  如果是一次性任务且立即执行,则按如下代码执行即可,运行效果如下所示:

IJobDetail job = JobBuilder.Create<MyJob>().Build();
ITrigger trigger = TriggerBuilder.Create().Build();await sched.ScheduleJob(job, trigger);
await sched.Start();Console.ReadLine();await sched.Shutdown(true);

在这里插入图片描述

  如果是一次性任务但需延后执行,则可在创建触发器时调用StartAt指定触发时间,但根据函数说明,也不是百分百按时执行,取决于调度器调度设置。

ITrigger trigger = TriggerBuilder.Create().StartAt(runTime).Build();

在这里插入图片描述
  如果是简单的、周期性地作业,则可在创建触发器时调用WithSimpleSchedule函数进行设置,从参考文献4的示例2来看(02_SchedulingCapabilitiesUsingSimpleTriggers),可以设置多种形式的调用频次(示例如下所示。SimpleScheduleBuilder类型中支持的运行规则不少,详细的介绍请见参考文献1、4和5。

// 设置每隔十秒调用一次,重复调用20次
ITrigger trigger = TriggerBuilder.Create().StartAt(runTime).WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithRepeatCount(20)).Build();
// 还支持按小时、分钟、自定义时间间隔调用
WithIntervalInHours
WithIntervalInMinutes
WithInterval//支持快捷函数
RepeatHourlyForever//每小时调用一次,不限次数
RepeatMinutelyForever//每分钟调用一次,不限次数
RepeatSecondlyForever//每秒调用一次,不限次数
RepeatHourlyForTotalCount//每小时一次,指定调用次数
RepeatMinutelyForTotalCount//每分钟一次,指定调用次数
RepeatSecondlyForTotalCount//每秒调用一次,指定调用次数

  创建作业及触发器实例过程中还支持调用WithIdentity函数设置名称及分组,以便在调度器调度多个作业时加以区分及控制。参考文献4的示例2演示了同时调度(02_SchedulingCapabilitiesUsingSimpleTriggers)2个分组近10个作业的示例,还包括重新调度作业的示意,有兴趣的可以直接去学习及参考代码。

参考文献:
[1]https://github.com/quartznet/quartznet
[2]https://blog.csdn.net/liyou123456789/article/details/126575055
[3]https://blog.csdn.net/u014708596/article/details/132297020
[4]https://github.com/quartznet/quartznet/tree/main/src/Quartz.Examples
[5]https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html


http://www.ppmy.cn/embedded/86794.html

相关文章

Dav_笔记11:SQL Tuning Overview-sql调优 之 1

Introduction to SQL Tuning SQL调优简介 SQL调优涉及以下基本步骤&#xff1a; ■通过查看系统中可用的过去SQL执行历史记录&#xff0c;识别负责大量应用程序工作负载和系统资源的高负载或顶级SQL语句 ■验证查询优化器为这些语句生成的执行计划是否合理执行 ■实施纠正…

PHP Filesystem 简介

PHP Filesystem 简介 PHP 是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适用于网页开发。在 PHP 中&#xff0c;Filesystem 是一个功能丰富的库&#xff0c;提供了一系列用于文件系统操作的函数。这些函数允许开发者读取、写入、修改和删除文件和目录&#xff0c;以及…

探索WebKit的画布世界:HTML5 <canvas> 元素的深度解析

探索WebKit的画布世界&#xff1a;HTML5 <canvas> 元素的深度解析 HTML5的<canvas>元素为Web开发带来了强大的图形绘制能力。它允许开发者使用JavaScript在网页上绘制图形&#xff0c;实现动画和复杂的视觉效果。WebKit&#xff0c;作为许多现代浏览器的渲染引擎&…

如何在AWS免费撸一年的服务器

亚马逊云服务器是一家领先的云计算服务提供商&#xff0c;为用户提供了丰富的云计算服务和资源。对于初创企业或个人开发者来说&#xff0c;AWS的免费套餐是一个不错的选择。那么&#xff0c;如何在AWS免费撸一年的服务器呢&#xff1f;九河云来为读者们分享一些经验。 首先&a…

STM32智能工业监控系统教程

目录 引言环境准备智能工业监控系统基础代码实现&#xff1a;实现智能工业监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业监控与优化问题解决方案与优化收尾与总结 1. 引言 智能工业监控系统通…

力扣刷题--674. 最长连续递增序列【简单】

题目描述 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < num…

jdk8——lambda表达式

在 Java 8 中引入了 Lambda 表达式&#xff0c;使得代码更加简洁和易读。Lambda 表达式是一种匿名函数&#xff0c;可以作为参数传递给方法或者存储在变量中。它主要用于简化函数式编程。 Lambda 表达式只能用于实现函数式接口。函数式接口是只包含一个抽象方法的接口&#xf…

单目三维内容生成系列—Zero-1-to-3: Zero-shot One Image to 3D Object

文章目录 1. 概述2. 背景介绍3. 方法3.1 学习控制相机视角3.2 视角条件扩散3.3 3D重建3.4 数据集 4. 实验评测4.1 任务4.2 基线4.3 基准和指标4.4 新视角合成结果4.5 3D重建结果4.6 从文本到图像到3D 5. 讨论 1. 概述 我们介绍了Zero-1-to-3框架&#xff0c;该框架仅需一张RGB…