定时任务
有许多场景会需要执行一些定时任务,例如:
- 定时上报应用状态。
- 定时从远程接口更新本地缓存。
- 定时进行文件切割、临时文件删除。
编写代码
首先引用NuGet包:TimedJob
在 Startup 类中进行配置
- 在
ConfigureServices
方法中配置应用服务。
services.AddTimedJob();
- 在
Configure
方法中创建应用的请求处理管道。
app.UseTimedJob();
创建一个类编写定时器代码
新建类 Schedule
并继承 Job
类
在需要定时执行的方法头部添加
[Invoke(Begin = "", Interval = 0, SkipWhileExecuting = true)]
属性名 | 类型 | 默认 | 说明 |
---|---|---|---|
Begin | string | - | 任务开始时间,格式:yyyy-MM-dd hh:mm:ss
|
Interval | int | 86400000 | 执行间隔,单位:毫秒(以任务开始时间为基准) |
SkipWhileExecuting | bool | false | 是否需要等待上一次任务执行完毕后才可执行下一次任务 |
完整代码:
using Pomelo.AspNetCore.TimedJob;
public class Schedule : Job
{
/// <summary>
/// 任务开始时间
/// </summary>
private const string _beginTime = "2021-09-27 00:00";
/// <summary>
/// 执行间隔,单位:毫秒(以任务开始时间为基准)
/// </summary>
private const int _interval = 1000 * 5;
/// <summary>
/// 是否需要等待上一次任务执行完毕后才可执行下一次任务
/// </summary>
private const bool _skipWhileExecuting = true;
[Invoke(Begin = _beginTime, Interval = _interval, SkipWhileExecuting = _skipWhileExecuting)]
public void Run()
{
Console.WriteLine("--------------------");
Console.WriteLine(DateTime.Now);
TaskA();
TaskB();
}
private void TaskA()
{
Console.WriteLine("任务A");
}
private void TaskB()
{
Console.WriteLine("任务B");
}
}