文章目錄
使用原生 HostedService 來進行 Schedule Job
最近有個舊專案 (.NET Core 2.1) 需要增加功能,升級 framework 是絕對必要的,只是其中一段用來執行每天更新 cache 的背景作業引起了我的興趣,我忘記為什麼當時沒有引用其他套件 (Hangfire
,Quartz.NET
…) 來達成定期執行的目的,但持續以來運作地也滿好的,不過因為需求單純,打算趁著這個機會想要來比較幾個套件與原生做法的優劣,先來紀錄一下 原生 HostedService 的做法
需求:
- 程式啟動先執行一次快取更新
- 每日 GMT +8 00:00 執行快取更新
所有工具使用筆記在此:
- 使用原生 HostedService 來進行 Schedule Job
- 使用 Hangfire 來進行 Schedule Job
- 使用 Quartz.NET 來進行 Schedule Job”
- 使用 Coravel 來進行 Schedule Job
基本環境說明
- macOS Ventura 13.4.1
- .NET SDK 6.0.400
- JetBrains Rider 2023.1.4
NuGet library
- Cronos 0.7.1
更新 cache 的 code:
UpdateCacheService.cs
public class UpdateCacheService { private readonly ILogger<UpdateCacheService> _logger; public UpdateCacheService(ILogger<UpdateCacheService> logger) { _logger = logger; } public Task GetAsync(CancellationToken cancellationToken) { _logger.LogInformation("Get Data for cache"); //update cache return Task.CompletedTask; } }
設定步驟
非必要 安裝套件:
Cronos
這是用來解析 Cron expression 的,可視需要加入
dotnet add package Cronos --version 0.7.1
新增 HostedService:
TimedHostedService.cs
註冊 HostedService:
Program.cs
builder.Services.AddHostedService<TimedHostedService>();
心得
我記得之前程式碼是從 microsoft 官方文件抄下來的,但我現在回頭找卻沒找到內容,不知道是我記錯還是 microsoft 官方移除了
- 優點:不用再額外學習其他套件的使用方式
- 缺點:程式碼沒那麼直覺 (我每次看到都要再想一下XD)
原始程式碼在此:yowko/timedhostedservicedemo
所有工具使用筆記在此:
- 使用原生 HostedService 來進行 Schedule Job
- 使用 Hangfire 來進行 Schedule Job
- 使用 Quartz.NET 來進行 Schedule Job”
- 使用 Coravel 來進行 Schedule Job
參考資訊
文章作者 Yowko Tsai
上次更新 2023-08-07
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。