.NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度

本文介绍了如何使用Python实现作业调度,包括一次性执行、间隔执行、每日定时和按周/日执行等场景,并提供了实例代码。此外,还分享了一个开源的作业调度库XiaoFeng.Threading,包含详细的使用方法和示例,适合进阶学习。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

作业调度其实就是一个定时器,定时完成某件事,

比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等。

作业类:XiaoFeng.Threading.Job

主调度类:XiaoFeng.Threading.JobScheduler

先介绍一下 IJob接口

/// 
/// 作业接口
/// 
public interface IJob
{
 #region 属性
    /// 
    /// 当前调度
 /// 
    IJobScheduler Scheduler { get; set; }
 /// 
    /// 运行状态
 /// 
    JobStatus Status { get; set; }
 /// 
    /// 作业数据
 /// 
    object State { get; set; }
 /// 
    /// 是否是异步
 /// 
    bool Async { get; set; }
 /// 
    /// 已成功运行次数
 /// 
    int SuccessCount { get; set; }
 /// 
    /// 失败运行次数
 /// 
    int FailureCount { get; set; }
 /// 
    /// 运行日志
 /// 
    List<string> Message { get; set; }
 /// 
    /// 取消信号
 /// 
    CancellationTokenSource CancelToken { get; set; }
 /// 
    /// 作业ID
 /// 
    Guid ID { get; }
 /// 
    /// 作业名称
 /// 
    string Name { get; set; }
 /// 
    /// 运行次数
 /// 
    int Count { get; }
 /// 
    /// 成功回调
 /// 
    Action SuccessCallBack { get; set; }
 /// 
 /// 当前任务执行完成后再进入计时队列 此方法最后一定要设置job的状态等待
 /// 
 Action CompleteCallBack { get; set; }
 /// 
 /// 失败回调
 /// 
 Action FailureCallBack { get; set; }
 /// 
 /// 停止作业回调
 /// 
 Action StopCallBack { get; set; }
 /// 
 /// 最后一次运行时间
 /// 
 DateTime? LastTime { get; set; }
 /// 
 /// 下次运行时间
 /// 
 DateTime? NextTime { get; set; }
 /// 
 /// 启动时间
 /// 
 DateTime? StartTime { get; set; }
 /// 
 /// 最大运行次数
 /// 
 int? MaxCount { get; set; }
 /// 
 /// 过期时间
 /// 
 DateTime? ExpireTime { get; set; }
 /// 
 /// 运行完是否销毁
 /// 
 bool IsDestroy { get; set; }
 /// 
 /// 定时器类型
 /// 
 TimerType TimerType { get; set; }
 /// 
 /// 时间
 /// 
 Time Time { get; set; }
 /// 
 /// 间隔 单位毫秒
 /// 
 int Period { get; set; }
 /// 
 /// 几点,几号,周几(周日为一周的第一天),可用负数,-1代表一天中最后一小时即23点,一周内最后一天即周六,一月内最后一天
 /// 
 int[] DayOrWeekOrHour { get; set; }
 #endregion

 #region 启动作业
 /// 
 /// 启动作业
 /// 
 void Start();
 /// 
 /// 启动作业
 /// 
 /// 调度
 void Start(IJobScheduler scheduler);
 #endregion

 #region 停止作业
 /// 
 /// 停止作业
 /// 
 void Stop();
 /// 
 /// 停止作业
 /// 
 /// 调度
 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

开源不易,多多支持~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值