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 values Allowed special characters Comment
┌───────────── second (optional) 0-59 * , - /
│ ┌───────────── minute 0-59 * , - /
│ │ ┌───────────── hour 0-23 * , - /
│ │ │ ┌───────────── day of month 1-31 * , - / L W ?
│ │ │ │ ┌───────────── month 1-12 or JAN-DEC * , - /
│ │ │ │ │ ┌───────────── day of week 0-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)
{
return;
}
// do something ...
}
}
调用代码
// 可以根据自己的实际需要,更改 Trigger 实例
TaskServicesManager.GetOrAdd<FooTask>();
是不是任务调度非常简单?代码量很少很少?
实战

上图为 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]: 精简版任务调度模块
NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块的更多相关文章
- Blazor 版 Bootstrap Admin 通用后台权限管理框架
前言 上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能.本篇文章带来的是微软最新出的 Blazor 版本的 ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构
基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)
http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...
- 基于EF+MVC+Bootstrap的通用后台管理系统及架构
分享基于EF+MVC+Bootstrap的通用后台管理系统及架构 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了 ...
- admin.ModelAdmin 后台管理关联对象,某个字段怎么显示值
admin.ModelAdmin 后台管理关联对象,某个字段如何显示值?对象 WxpAccount: accountName = ... 对象 AccountMenu: ...
- 使用django的admin的后台管理界面
django的admin后台管理界面是方便我们对数据库操作的 是一个在浏览器显示的 图形化界面数据库操作 我们先在django中的admin中把我们需要在图形化界面中进行操作的表导入进去: 先把m ...
- 产品设计-后台管理权限设计RBAC
最近在做OA系统,设计到不同的员工会拥有不同权限对OA进行操作,总结了一下整体的设计 做权限的分配就是为了更好的管理不同类别的员工,如人事部可以看到普通员工的薪酬,可以查看全部员工的考勤数据请假等,而 ...
- Django之model admin自定义后台管理
Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 比如,数据表如下: from django.db ...
- 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示
手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...
随机推荐
- JavaScript with Image:创建缩略图
当图片很大,直接把图片从Server下载到浏览器上看是一种很不明智的做法,浪费了服务器的资源,网络带宽和客户端的资源.所以,通常Server和Client之间会传输缩略图,只有当Client请求某张图 ...
- NW.js打包一个桌面应用
1.安装nw(可以到官网:https://nwjs.io下载) npm install nw -g 2.创建一个最最简单的nw应用 在nwjs文件夹中 新建index.html和package.jso ...
- [LC]26题 Remove Duplicates from Sorted Array (删除排序数组中的重复项)(双指针法)(原地实现)
①中文题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...
- ArcGIS API For Javascript:热力图不同级别下的优化方法
我们在地图缩放的不同级别下,热力图的显示效果会不同,由于点密度与模糊参数默认是固定的,因此需要对参数进行动态修改,以满足不同缩放级别下可以得到较好的显示效果. 思路是监听地图缩放级别,将地图缩放级别作 ...
- VLAN实验(1)Access接口
1.选择两台S3700的交换机,5台PC机,并按照下图链接好并填写IP,完成此拓扑图 2.由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的主机应该是 ...
- 构思一个在windows下仿objc基于动画层ui编程的ui引擎
用c/c++编程有些年了,十个指头可以数齐,在涉入iOS objc开发后,有种无比舒服的感觉,尤其在UI开发上. 在QuartzCore.framework下动画和透明窗口等许多效果的事都变得那么方便 ...
- Previous operation has not finished; run 'cleanup' if it was interrupted最简单有效的解决方法
今天提交代码报错,看了看提示的错误,百度了一下,发现操作都比较繁琐,所以自己重新给一个最简单有效的. 有的要下载sqlite3.exe,借助它清空本地.svn\wc.db数据库文件里面的operati ...
- Itellij idea2019.2 激活码,有效期2020.5
Itellij idea2019.2 激活码,有效期2020.5 MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoi ...
- jquery ajax提交数据给后端
大家好,今天铁柱兄给大家带一段jquery ajax提交数据给后端的教学. 初学javaweb的同学前端提交数据基本上都是用form表单提交,这玩意儿反正我是觉得不太好玩.而JavaScript aj ...
- 开始你的api:NetApiStarter
在此之前,写过一篇 给新手的WebAPI实践 ,获得了很多新人的认可,那时还是基于.net mvc,文档生成还是自己闹洞大开写出来的,经过这两年的时间,netcore的发展已经势不可挡,自己也在不断的 ...