.NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度相关的知识,希望对你有一定的参考价值。
作业调度其实就是一个定时器,定时完成某件事,比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等。
作业类:XiaoFeng.Threading.Job
主调度类:XiaoFeng.Threading.JobScheduler
先介绍一下 IJob接口
/// <summary>
/// 作业接口
/// </summary>
public interface IJob
#region 属性
/// <summary>
/// 当前调度
/// </summary>
IJobScheduler Scheduler get; set;
/// <summary>
/// 运行状态
/// </summary>
JobStatus Status get; set;
/// <summary>
/// 作业数据
/// </summary>
object State get; set;
/// <summary>
/// 是否是异步
/// </summary>
bool Async get; set;
/// <summary>
/// 已成功运行次数
/// </summary>
int SuccessCount get; set;
/// <summary>
/// 失败运行次数
/// </summary>
int FailureCount get; set;
/// <summary>
/// 运行日志
/// </summary>
List<string> Message get; set;
/// <summary>
/// 取消信号
/// </summary>
CancellationTokenSource CancelToken get; set;
/// <summary>
/// 作业ID
/// </summary>
Guid ID get;
/// <summary>
/// 作业名称
/// </summary>
string Name get; set;
/// <summary>
/// 运行次数
/// </summary>
int Count get;
/// <summary>
/// 成功回调
/// </summary>
Action<IJob> SuccessCallBack get; set;
/// <summary>
/// 当前任务执行完成后再进入计时队列 此方法最后一定要设置job的状态等待
/// </summary>
Action<IJob> CompleteCallBack get; set;
/// <summary>
/// 失败回调
/// </summary>
Action<IJob, Exception> FailureCallBack get; set;
/// <summary>
/// 停止作业回调
/// </summary>
Action<IJob> StopCallBack get; set;
/// <summary>
/// 最后一次运行时间
/// </summary>
DateTime? LastTime get; set;
/// <summary>
/// 下次运行时间
/// </summary>
DateTime? NextTime get; set;
/// <summary>
/// 启动时间
/// </summary>
DateTime? StartTime get; set;
/// <summary>
/// 最大运行次数
/// </summary>
int? MaxCount get; set;
/// <summary>
/// 过期时间
/// </summary>
DateTime? ExpireTime get; set;
/// <summary>
/// 运行完是否销毁
/// </summary>
bool IsDestroy get; set;
/// <summary>
/// 定时器类型
/// </summary>
TimerType TimerType get; set;
/// <summary>
/// 时间
/// </summary>
Time Time get; set;
/// <summary>
/// 间隔 单位毫秒
/// </summary>
int Period get; set;
/// <summary>
/// 几点,几号,周几(周日为一周的第一天),可用负数,-1代表一天中最后一小时即23点,一周内最后一天即周六,一月内最后一天
/// </summary>
int[] DayOrWeekOrHour get; set;
#endregion
#region 启动作业
/// <summary>
/// 启动作业
/// </summary>
void Start();
/// <summary>
/// 启动作业
/// </summary>
/// <param name="scheduler">调度</param>
void Start(IJobScheduler scheduler);
#endregion
#region 停止作业
/// <summary>
/// 停止作业
/// </summary>
void Stop();
/// <summary>
/// 停止作业
/// </summary>
/// <param name="scheduler">调度</param>
void Stop(IJobScheduler scheduler);
#endregion
接下来每种类型写一下实例
1.定时只执行一次也就是多久后执行
var job = new XiaoFeng.Threading.Job
Async = true,
Name="作业名称",
TimerType= XiaoFeng.Threading.TimerType.Once,
StartTime= DateTime.Now.AddMinutes(5),
SuccessCallBack = job =>
/*到时间执行任务*/
;
job.Start();
当前作业为5 分钟后执行一次,然后就是销毁,作业从调度中移除。
也可以用任务去实现当前功能如下代码:
Task.Factory.StartNew(() =>
/*等待5分钟*/
Task.Delay(5 * 60 * 1000).Wait();
/*执行作业任务*/
);
2.间隔执行
var job = new XiaoFeng.Threading.Job
Async = true,
Name = "作业名称",
TimerType = XiaoFeng.Threading.TimerType.Interval,
Period = 5000,
StartTime = DateTime.Now.AddMinutes(5),
SuccessCallBack = job =>
/*到时间执行任务*/
;
job.Start();
当前作业为,5分钟后运行,然后每隔5分钟会再执行一次
间隔执行就是每隔一段时间去执行一次任务,也可以用任务去实现当前功能,如下:
var cancelToken = new CancellationTokenSource();
Task.Factory.StartNew(() =>
while (!cancelToken.IsCancellationRequested)
/*等待5分钟*/
Task.Delay(5 * 60 * 1000).Wait();
/*执行作业任务*/
,TaskCreationOptions.LongRunning);
上边代码同样实现了每间隔5分钟执行一次作业任务
如果想取消当前任务直接调用 cancelToken.Cancel(); 这样就可以取消当前任务了。
3.每天定时执行一次
var job = new XiaoFeng.Threading.Job
Async = true,
Name = "作业名称",
TimerType = XiaoFeng.Threading.TimerType.Day,
Time = new XiaoFeng.Threading.Time(2, 0, 0),
StartTime = DateTime.Now.AddMinutes(5),
SuccessCallBack = job =>
/*到时间执行任务*/
;
当前作业为,5分钟后运行,然后每天2点执行一次
4.每周几几点执行,每月几号几点执行
var job = new XiaoFeng.Threading.Job
Async = true,
Name = "作业名称",
TimerType = XiaoFeng.Threading.TimerType.Week,
DayOrWeekOrHour = new int[] 1, 4 ,
Time = new XiaoFeng.Threading.Time(2, 0, 0),
StartTime = DateTime.Now.AddMinutes(5),
SuccessCallBack = job =>
/*到时间执行任务*/
;
job.Start();
当前作业为,5分钟后运行,然后每周的周一,四的2点执行一 次。
以上就是作业调度的简单使用。
开源地址:https://github.com/zhuovi/XiaoFeng/tree/master/Threading
语雀地址:https://www.yuque.com/fayelf/xiaofeng/yl8tkh
开源不易,多多支持~
以上是关于.NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度的主要内容,如果未能解决你的问题,请参考以下文章
.net core系列之《.net core中使用MySql以及Dapper》
C#(.Net Core WebAPI)之API文档的生成(Swagger)