先使用 NuGet 安裝 Quartz.AspNetCore 套件,或是使用 .NET CLI 執行以下指令安裝:
建立一個任務,需要實作 IJob 介面,假設叫做 MyJob:
在 Program.cs 中註冊任務:
上面的 0/5 * * * * ? 是 CRON 表達是,代表從第 0 秒開始,每五秒執行一次,
如果覺得使用 CRON 表達式很麻煩,也可以使用 TimeSpan ,可以很方便切換單位:
如果要指定起始時間也可以這樣:
參考資料:
Quartz.NET
dotnet add package Quartz.AspNetCore
建立一個任務,需要實作 IJob 介面,假設叫做 MyJob:
using Quartz;
public class MyJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine($"Hello World! {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
return Task.CompletedTask;
}
}
在 Program.cs 中註冊任務:
using Quartz;
using Quartz.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddQuartz(q =>
{
var jobKey = new JobKey("my-job");
q.AddJob<MyJob>(j => j
.StoreDurably()
.WithIdentity(jobKey)
);
q.AddTrigger(t => t
.ForJob(jobKey)
.WithCronSchedule("0/5 * * * * ?")
);
});
builder.Services.AddQuartzServer(options =>
{
// 等待所有工作結束再關閉
options.WaitForJobsToComplete = true;
});
var app = builder.Build();
上面的 0/5 * * * * ? 是 CRON 表達是,代表從第 0 秒開始,每五秒執行一次,
如果覺得使用 CRON 表達式很麻煩,也可以使用 TimeSpan ,可以很方便切換單位:
q.AddTrigger(t => t
.ForJob(jobKey)
.WithSimpleSchedule(schedule => schedule.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
);
如果要指定起始時間也可以這樣:
q.AddTrigger(t => t
.ForJob(jobKey)
.WithSimpleSchedule(schedule => schedule.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
// 執行的秒數為每分鐘的 00, 05, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 秒執行
.WithDailyTimeIntervalSchedule(5, IntervalUnit.Second, x => x
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
)
);
參考資料:
Quartz.NET
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com