Quartz.Net的基础使用方法,多任务执行
接着上面单任务执行的代码做一下简单的扩展
主要看下面这段代码,这是Quartz多任务调度的方法,主要就是围绕这个方法去扩展:
//
// 摘要:
// Schedule all of the given jobs with the related set of triggers.
//
// 言论:
// If any of the given jobs or triggers already exist (or more specifically, if
// the keys are not unique) and the replace parameter is not set to true then an
// exception will be thrown.
Task ScheduleJobs(IReadOnlyDictionary<IJobDetail, IReadOnlyCollection<ITrigger>> triggersAndJobs, bool replace, CancellationToken cancellationToken = default);
1、首先我们建两个任务类:
using System;
using System.Threading.Tasks;
using Quartz; namespace HHF.Quartz
{
public class Task_1 : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Console.Out.WriteLineAsync($"这是任务一,执行时间:{DateTime.Now}");
}
}
}
2、改造一下之前的QuartzScheduler类,添加一个GetJobs方法,生成任务集合
/// <summary>
/// 很Low的一段代码
/// </summary>
/// <returns></returns>
public List<IJobDetail> GetJobs()
{
IJobDetail job1 = JobBuilder.Create<Task_1>()
.WithIdentity("job1")
.Build();
IJobDetail job2 = JobBuilder.Create<Task_2>()
.WithIdentity("job3")
.Build();
return new List<IJobDetail>() { job1, job2 };
}
3、改造一下Run方法
/// <summary>
/// 任务调度的使用过程
/// </summary>
/// <returns></returns>
public async static Task Run()
{
// 创建scheduler的引用
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = await schedFact.GetScheduler(); // 获取job集合
var jobs = GetJobs();
// 申明一个任务与触发器映射的字典集合
var jobAndTriggerMapping = new Dictionary<IJobDetail, IReadOnlyCollection<ITrigger>>();
// 遍历任务列表
for (int i = ; i < jobs.Count; i++)
{
var job = jobs[i];
// 只读的触发器集合
var triggers = new ReadOnlyCollection<ITrigger>(
new List<ITrigger>()
{
TriggerBuilder.Create()
.WithIdentity("trigger_"+i)
.WithSimpleSchedule(x => x.WithIntervalInSeconds(i+).RepeatForever())
.Build()
});
// 建立映射关系
jobAndTriggerMapping[job] = triggers;
}
// 将映射关系包装成制度字典集合
var readOnlyjobAndTriggerMapping = new ReadOnlyDictionary<IJobDetail, IReadOnlyCollection<ITrigger>>(jobAndTriggerMapping); /*
* 使用trigger规划执行任务job
*第二个参数replace:如果为true,则指定的触发器或者任务名称已经存在将会替换,否则将抛出异常
*/
await sched.ScheduleJobs(readOnlyjobAndTriggerMapping, true); // 启动 scheduler
await sched.Start();
}
4、查看执行结果,我们可以看到,任务一的执行间隔时间为5秒,任务二的执行间隔时间为6秒,可以正常执行。
Quartz.Net的基础使用方法,多任务执行的更多相关文章
- Quartz.Net的基础使用方法,多任务执行继续扩展
前一篇随笔讲了Quartz多任务的简单实现 Quartz.Net的基础使用方法,多任务执行 这一篇,来简单对前一篇进行一下简单的扩展 看了前一篇的代码会发现,每次新增一个任务还要去GetJobs方法里 ...
- 2019-1-29-Moq基础-判断方法被执行
title author date CreateTime categories Moq基础 判断方法被执行 lindexi 2019-01-29 16:29:57 +0800 2019-01-17 1 ...
- Quartz.Net的基础使用方法,单任务执行
1.先创建一个控制台应用程序 2.应用Quartz的NuGet包 3.编写执行任务代码 using System; using System.Threading.Tasks; using Quar ...
- Moq基础 判断方法被执行
如果想知道注入的类的某个方法被使用了几次,就可以通过 mock 提供的方法进行判断方法有没被执行或被使用多少次 本文是一个系列,具体请看 Moq基础(一) 为什么需要单元测试框架 Moq基础(二) 快 ...
- Spring+Quartz 实现定时任务的配置方法
Spring+Quartz 实现定时任务的配置方法 整体介绍 一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是 ...
- 逆向与BOF基础——注入shellcode并执行&Return-to-libc
逆向与BOF基础--注入shellcode并执行 准备阶段 下载安装execstack. 本次实验实验的shellcode是心远的文章中生成的代码,即\x31\xc0\x50\x68\x2f\x2f\ ...
- Java 进阶7 并行优化 JDK多任务执行框架技术
Java 进阶7 并行优化 JDK多任务执行框架技术 20131114 Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工 ...
- 千锋教育Vue组件--vue基础的方法
课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head& ...
- SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...
随机推荐
- 一、Python系列——函数的应用之名片管理系统
card_list = [] def main_desk(): print('*'*50) print('欢迎使用[名片管理系统]V1.0') print('1.新建名片') print('2.显示全 ...
- OSCP Learning Notes - Enumeration(3)
SMB Enumeration 1. Set the smb configurations. locate smb.conf vim /etc/samba/smb.conf Insert the gl ...
- Ethical Hacking - GAINING ACCESS(22)
CLIENT SIDE ATTACKS - BeEf Framework Browser Exploitation Framework allowing us to launch a number o ...
- Redis如何存储和计算一亿用户的活跃度
1 前段时间,在网上看到一道面试题: 如何用redis存储统计1亿用户一年的登陆情况,并快速检索任意时间窗口内的活跃用户数量. 觉得很有意思,就仔细想了下 .并做了一系列实验,自己模拟了下 .还是有点 ...
- Java对象创建模式
创建Java对象时,对于可为空的属性,创建对象的时候有3种模式:重叠构造器模式.JavaBeans模式.Builder模式(推荐).Stream模式(推荐). ...
- javascript : 找到一个树型数据的一个节点及其所有父节点
如题. (function () { let tree = { "id": 0, "label": "all", "childre ...
- DP学习记录Ⅰ
DP学习记录Ⅱ 前言 状态定义,转移方程,边界处理,这三部分想好了,就问题不大了.重点在状态定义,转移方程是基于状态定义的,边界处理是方便转移方程的开始的.因此最好先在纸上写出自己状态的意义,越详细越 ...
- vue图片上传的简单组件
<template> <div class="rili" id="rili"> <div class="updel&qu ...
- PHP中interface的用处
确实,PHP 接口是有它的目的的. 它们是契约,是给其他开发人员的说明手册.然而,还是很难理解接口有什么用. 基础 接口是抽象的类,无法直接实例化,但是可被实现. 这是一个基本的例 int ...
- python关于字符编码的基本操作
字符编码 (注意:关于字符编码,如果没有特殊业务要求,请牢记仅使用UTF-8编码) 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节.如果要在网络上传输,或者 ...