在現代的應用程式開發中,執行定期任務或排程任務是一個常見的需求。這些任務可能包括資料庫清理、電子郵件發送、資料同步等。
Coravel 是一個輕量級的開源專案,提供了包括排程、貯列、郵件等功能,是一個功能豐富且易於使用的管理工具,讓開發人員能夠輕鬆地建立可靠的排程系統。本篇文章將介紹如何使用 .NET 6 和 Coravel 進行排程的應用程式開發,以提升效率並有效管理排程任務。
建立.NET6專案
本次範例使用 .NET6 Worker Service 專案進行,這樣後期可以視需求打包成 Windows Service 在背景進行排程工作 (可以參考文章:用.Net 6 Worker 開發 Windows Service) 。
打開 Visual Studio 或任何適用的編輯器,選擇建立新的專案,並選擇「Worker」範本。這將建立一個基本的 Worker Service 專案結構,包含 Program.cs 和 Worker.cs 檔案
安裝 Coravel
使用 command 或是 Nuget 套件管理員找到 Coravel 套件並安裝。

設定排程管理器
在 Program.cs 中 註冊排程,透過 AddScheduler()
和 AddTransient()
來註冊排程類別,並在 UseScheduler
中設定排程執行的頻率。
using Coravel;
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
//使用Coravel排程
services.AddScheduler();
//註冊排程任務
services.AddTransient<Worker>();
})
.Build();
host.Services.UseScheduler(scheduler =>
{
//設定排程在當地時間17:20執行
scheduler.Schedule<Worker>().DailyAt(17,20).Zoned(TimeZoneInfo.Local)
});
Coravel內建了很多常用的時間頻率,不需要在寫傳統的Cron表達式,非常方便,以下為以些常見的範例:
- 在第一次啟動服務時先執行一次
scheduler.Schedule<Worker>().EverySeconds().RunOnceAtStart();
- 每三秒鐘執行一次
scheduler.Schedule<Worker>().EverySeconds(3);
- 每五分鐘執行一次
scheduler.Schedule<Worker>().EveryFiveMinutes();
- 每小時執行一次
scheduler.Schedule<Worker>().Hourly();
- 每小時的第N分執行一次
scheduler.Schedule<Worker>().Hourly(N);
- 每個星期一的五點執行一次
scheduler.Schedule<Worker>().DailyAtHour(5).Monday();
- 使用Cron表達式
scheduler.Schedule<Worker>().Cron("* * * * *");
更多的時間間隔範例可參考官方文件
要使用 Coravel 排程的類別需實作 Invocable
, 代表一個個獨立的任務,可以在Invoke()
中編寫主要邏輯。
public class Worker : IInvocable
{
private readonly ILogger _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
public async Task Invoke()
{
//主要邏輯
_logger.LogInformation("Triggered");
}
}