天天看點

快速入門任務排程架構-Quartz

作者:opendotnet

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分鐘。可以根據需要調整任務觸發器的參數。

繼續閱讀