前言

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]: 精简版任务调度模块的更多相关文章

  1. Blazor 版 Bootstrap Admin 通用后台权限管理框架

    前言 上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能.本篇文章带来的是微软最新出的 Blazor 版本的 ...

  2. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构

      基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...

  3. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)

    http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...

  4. 基于EF+MVC+Bootstrap的通用后台管理系统及架构

    分享基于EF+MVC+Bootstrap的通用后台管理系统及架构 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了 ...

  5. admin.ModelAdmin 后台管理关联对象,某个字段怎么显示值

    admin.ModelAdmin 后台管理关联对象,某个字段如何显示值?对象 WxpAccount:              accountName = ... 对象 AccountMenu:    ...

  6. 使用django的admin的后台管理界面

    django的admin后台管理界面是方便我们对数据库操作的  是一个在浏览器显示的  图形化界面数据库操作 我们先在django中的admin中把我们需要在图形化界面中进行操作的表导入进去: 先把m ...

  7. 产品设计-后台管理权限设计RBAC

    最近在做OA系统,设计到不同的员工会拥有不同权限对OA进行操作,总结了一下整体的设计 做权限的分配就是为了更好的管理不同类别的员工,如人事部可以看到普通员工的薪酬,可以查看全部员工的考勤数据请假等,而 ...

  8. Django之model admin自定义后台管理

    Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 比如,数据表如下: from django.db ...

  9. 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示

    手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...

随机推荐

  1. Windows下Apache与PHP的安装与配置

    下载Apache Apache的官网(http://httpd.apache.org) 1.把解压后的Apache拷贝到要安装的目标位置.建议拷贝到C盘根目录下,因为这是其默认设置. 2.我选择的是拷 ...

  2. 后台开发小白必学服务器框架——UDPServer

    毕业后加入了一家大型的互联网公司的音视频产品部门做后台开发,其实我本身是学习自动化的,研究生的方向嵌入式系统,对互联网可是一知半解,因此能进入这样一个大公司还是很幸运的. 刚开始工作的半年应该是在上份 ...

  3. hdu 1233 还是畅通工程 (prim, kruskal)

    还是畅通工程Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. nyoj 276-比较字母大小 (顺序比较, 逆序输出)

    276-比较字母大小 内存限制:64MB 时间限制:3000ms 特判: No 通过数:13 提交数:15 难度:1 题目描述: 任意给出两个英文字母,比较它们的大小,规定26个英文字母A,B,C.. ...

  5. BeautifulSoup随笔

    BeautifulSoup是一个类 b = BeautifulSoup(html) b对象有与html结构相关的各种方法和和属性. a = b.findAll('a')获得标签的对象 a对象又有关于属 ...

  6. SpringBoot源码学习系列之SpringMVC自动配置

    目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...

  7. DDCTF2019 的四道题wp

    MIsc:流量分析 这道题,在比赛的时候就差个key了,但是没想到要改高度,后来群里师傅说了下,就再试试, 导出来改高度. 导出来,把 把%5c(4)前面的hex删掉,改成png,就直接拿去那个img ...

  8. css 给div添加滚动并隐藏滚动条

    在html中 <div class="box"> <div>下面内容会单独滚动</div> <div class="scroll ...

  9. TraceID在AspNETCore日志排障中的应用

    前言 .NetCore日志,相信大家多少都接触过,博客园有关 ① AspNetCore依赖注入第三方日志组件   ②第三方日志组件Nlog,Serilog 应用方法的博文层出不穷. 结合程序的部署结构 ...

  10. ganglia 服务端

    #!/bin/bash #配置参数 serverIP=192.168.1.16 network=ens32 #关闭selinux setenforce sed -i 's/SELINUX=enforc ...