26. 定时任务/后台任务
4.8.0+ 版本说明
版本说明
以下内容仅限 Furion 2.0.0 +
版本使用。
IIS 部署说明
由于 IIS 有回收的机制,所以定时任务应该采用独立部署,不然经常出现不能触发的情况。查看【Worker Service 章节】
26.1 关于定时任务
顾名思义,定时任务就是在特定的时间或符合某种时间规律执行的任务。通常定时任务有四种时间调度方式:
缓隔时间
方式:延迟多少时间后调配任务,这种方式任务只会被调用一次。间隔时间
方式:每隔一段固定时间调配任务,无间断调用任务。Cron 表达式
方法:通过Cron
表达式计算下一次执行时间进行调配任务,可以配置特定时间范围内执行,也可以无间断执行。自定义下次执行时间
:可以通过各种逻辑运算返回下一次执行时间
26.2 如何实现
Furion
框架提供了两种方式实现定时任务:
SpareTime
静态类:SpareTime
静态类提供SpareTime.Do([options])
方式调用。ISpareTimeWorker
依赖方式:通过自定义类实现ISpareTimeWorker
接口并编写一定规则的方法即可。需要在Startup.cs
中注册services.AddTaskScheduler()
26.3 缓隔方式使用
26.3.1 特定时间后执行
这里演示 3s
后执行
Console.WriteLine("当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// timer 是定时器的对象,包含定时器相关信息
// count 表示执行次数,这里只有一次
SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
});
26.3.2 配置任务信息
SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}, "jobName", "描述一下这个任务是干什么的");
jobName
标识任务的唯一标识,通过这个标识可以启动、暂停、销毁任务。
26.3.3 手动启动执行
默认情况下,任务初始化后就立即启动,等待符合的时间就执行,有些时候我们仅仅想初始化时间,不希望立即执行,只需要配置 startNow
即可:
SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
},"jobName", startNow: false);
// 手动启动执行
SpareTime.Start("jobName");