定時(shí)任務(wù)
有許多場(chǎng)景會(huì)需要執(zhí)行一些定時(shí)任務(wù),例如:
- 定時(shí)上報(bào)應(yīng)用狀態(tài)。
- 定時(shí)從遠(yuǎn)程接口更新本地緩存。
- 定時(shí)進(jìn)行文件切割、臨時(shí)文件刪除。
編寫(xiě)代碼
首先引用NuGet包:TimedJob

在 Startup 類(lèi)中進(jìn)行配置
- 在
ConfigureServices方法中配置應(yīng)用服務(wù)。
services.AddTimedJob();
- 在
Configure方法中創(chuàng)建應(yīng)用的請(qǐng)求處理管道。
app.UseTimedJob();
創(chuàng)建一個(gè)類(lèi)編寫(xiě)定時(shí)器代碼
新建類(lèi) Schedule 并繼承 Job 類(lèi)
在需要定時(shí)執(zhí)行的方法頭部添加
[Invoke(Begin = "", Interval = 0, SkipWhileExecuting = true)]
| 屬性名 | 類(lèi)型 | 默認(rèn) | 說(shuō)明 |
|---|---|---|---|
| Begin | string | - | 任務(wù)開(kāi)始時(shí)間,格式:yyyy-MM-dd hh:mm:ss
|
| Interval | int | 86400000 | 執(zhí)行間隔,單位:毫秒(以任務(wù)開(kāi)始時(shí)間為基準(zhǔn)) |
| SkipWhileExecuting | bool | false | 是否需要等待上一次任務(wù)執(zhí)行完畢后才可執(zhí)行下一次任務(wù) |
完整代碼:
using Pomelo.AspNetCore.TimedJob;
public class Schedule : Job
{
/// <summary>
/// 任務(wù)開(kāi)始時(shí)間
/// </summary>
private const string _beginTime = "2021-09-27 00:00";
/// <summary>
/// 執(zhí)行間隔,單位:毫秒(以任務(wù)開(kāi)始時(shí)間為基準(zhǔn))
/// </summary>
private const int _interval = 1000 * 5;
/// <summary>
/// 是否需要等待上一次任務(wù)執(zhí)行完畢后才可執(zhí)行下一次任務(wù)
/// </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("任務(wù)A");
}
private void TaskB()
{
Console.WriteLine("任務(wù)B");
}
}
運(yùn)行結(jié)果
