当前位置: 首页 >前端技术 > NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

前言

NETCore 里说到任务调度,大家首先想到的应该是大名鼎鼎的 QuartzNET 与 Hangfire,然而本篇介绍的却都不是,而是 Bootstrap Admin(以下简称 BA)通用后台权限管理框架中内置的一个小功能任务调度模块。

为什么重复造轮子

我个人认为这不是重复造轮子,只有自己写过调度才能对 调度 有深刻的体会,能对很多平时未涉及的知识进行巩固与学习,通过 Tasks 模块的编写对多线程、异步等知识点都能更深入的了解与实践。

Task 组件介绍

组件同时支持 .net framework 4.5+ 以及 .net standard 2.0 netcoreapp 3.0 netcoreapp 3.1

用法介绍

NETCore 容器注入

public void ConfigureServices(IServiceCollection services){services.AddTaskServices();}

NETFramework 4.5+

// 程序入口调用TaskServicesManager.Init();

例子

默认任务 (立即执行,仅执行一次)

TaskServicesManager.GetOrAdd("简单任务1", token => Console.WriteLine("Hello world"));TaskServicesManager.GetOrAdd("简单任务2", token => Console.WriteLine("Hello world"), TriggerBuilder.Default.Build());

周期性任务 (1 分钟后间隔 5 秒执行2次任务)

// 1 分钟后间隔 5 秒执行2次任务var trigger = TriggerBuilder.Default.WithInterval(TimeSpan.FromSeconds(5)).WithRepeatCount(2).WithStartTime(DateTimeOffset.Now.AddMinutes(1)).Build(); TaskServicesManager.GetOrAdd("周期任务", token => Console.WriteLine("Hello world"), trigger);

Cron表达式任务

Cron 格式说明
cron 表达式是用于定义固定时间、日期和间隔的掩码。掩码由秒(可选)、分钟、小时、日、月和星期字段组成。所有字段都允许指定多个值,如果所有字段都包含匹配的值,则任何给定的日期/时间都将满足指定的 cron 表达式。

Allowed valuesAllowed special charactersComment┌───────────── second (optional)0-59  * , - /  │ ┌───────────── minute0-59  * , - /  │ │ ┌───────────── hour0-23  * , - /  │ │ │ ┌───────────── day of month  1-31  * , - / L W ?│ │ │ │ ┌───────────── month1-12 or JAN-DEC* , - /  │ │ │ │ │ ┌───────────── day of week0-6  or SUN-SAT* , - / # L ?Both 0 and 7 means SUN│ │ │ │ │ │* * * * * *
// 每秒钟执行一次任务TaskServicesManager.GetOrAdd("表达式任务", token => Console.WriteLine("Hello world"), TriggerBuilder.Build(Cron.Secondly()));// 每分钟执行一次任务TaskServicesManager.GetOrAdd("表达式任务", token => Console.WriteLine("Hello world"), TriggerBuilder.Build(Cron.Minutely()));// 间隔 5 秒循环执行任务TaskServicesManager.GetOrAdd("表达式任务", token => Console.WriteLine("Hello world"), TriggerBuilder.Build("*/5 * * * * *"));// 每分钟的第 5 秒循环执行任务TaskServicesManager.GetOrAdd("表达式任务", token => Console.WriteLine("Hello world"), TriggerBuilder.Build("5 * * * * *"));

通过上面的简单介绍可以看出来这个 Task 组件要比 QuartzNET 与 Hangfire 简单太多太多了,再来个稍微复杂一点点的。

/// <summary>/// 后台任务实现类/// </summary>public class FooTask : ITask{/// <summary>/// 后台任务具体业务操作/// </summary>public async Task Execute(CancellationToken cancellationToken){// 模拟任务执行耗时500毫秒try{await Task.Delay(500, cancellationToken);}catch (TaskCanceledException) { }if (cancellationToken.IsCancellationRequested){retu;}// do something ...}}

调用代码

// 可以根据自己的实际需要,更改 Trigger 实例TaskServicesManager.GetOrAdd<FooTask>();

是不是任务调度非常简单?代码量很少很少?

实战

NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块 _ JavaClub全栈架构师技术笔记

上图为 Bootstrap Admin 后台管理平台内的任务管理实时输出页面,每间隔 5 秒钟,屏幕更新一条记录,底层使用 signalR 进行的消息推送 链接地址

码云项目地址:https://gitee.com/LongbowEnterprise/BootstrapAdmin
演示网站地址:https://ba.sdgxgz.com
任务管理地址:https://ba.sdgxgz.com/Admin/Tasks

NETCore Bootstrap Admin 通用后台管理权限 [1]: 前后台分离权限管理系统介绍
NETCore Bootstrap Admin 通用后台管理权限 [2]: Blazor 版本介绍
NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

作者:ArgoZhang
来源链接:https://www.cnblogs.com/argozhang/p/12046445.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/front/118623.html

标签:Bootstrap
分享给朋友:

“NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块” 的相关文章

HTML5结构标签 2022年05月16日 21:18:49
JavaScript提高班之ES6(七) 2022年05月16日 21:21:41
span标签居中显示的正确处理方法 2022年05月17日 21:06:12
关于WebView 控件,你了解多少? 2022年05月28日 21:59:43
HTML框架结构标签(frameset) 2022年06月06日 04:22:28
HTML笔记及案例(全) 2022年06月08日 03:02:14
HTML-框架标签frame 2022年06月08日 18:39:17
HTML5 data-* 自定义属性及其注意点 2022年06月08日 22:16:40
HTML rel属性的作用 2022年06月09日 21:19:18