Quartz是一個開源的任務排程架構,可以在C#中使用。它提供了許多功能,例如可靠的定時執行、任務的持久化、分布式排程等。
以下是使用Quartz實作簡單任務排程的步驟:
1. 安裝Quartz NuGet包
在Visual Studio中打開項目,右鍵點選“引用”,選擇“管理NuGet程式包”,在搜尋框中輸入“Quartz”,選擇“Quartz”并安裝。
2. 建立任務類
建立一個類來實作任務的邏輯。例如,建立一個名為“HelloJob”的類,實作IJob接口。
```csharp
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello Quartz!");
}
}
```
在Execute方法中編寫任務邏輯。
3. 建立排程器
在應用程式中建立一個排程器執行個體。
```csharp
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();
```
4. 建立任務觸發器
建立一個任務觸發器,指定任務的執行時間和重複次數。
```csharp
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
```
在上面的代碼中,觸發器被設定為每10秒鐘執行一次。
5. 将任務和觸發器添加到排程器中
将任務和觸發器添加到排程器中。
```csharp
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
await scheduler.ScheduleJob(job, trigger);
```
6. 停止排程器
在應用程式退出時,停止排程器。
```csharp
await scheduler.Shutdown();
```
完整示例代碼:
```csharp
using Quartz;
using Quartz.Impl;
using System;
using System.Threading.Tasks;
namespace QuartzDemo
{
class Program
{
static async Task Main(string[] args)
{
// 建立排程器
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();
// 建立任務觸發器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
// 建立任務
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// 将任務和觸發器添加到排程器中
await scheduler.ScheduleJob(job, trigger);
// 等待任務執行
await Task.Delay(TimeSpan.FromSeconds(60));
// 停止排程器
await scheduler.Shutdown();
}
}
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello Quartz!");
}
}
}
```
在上面的示例中,任務被設定為每10秒鐘執行一次,持續1分鐘。可以根據需要調整任務觸發器的參數。