安裝 NuGet 包:在 Visual Studio 中打開項目,右鍵單擊項目名稱,選擇“管理 NuGet 包”,搜索“Quartz”並安裝。 創建作業:創建一個實現了 IJob 介面的類,該介面包含一個 Execute 方法,該方法將在作業運行時調用。例如: public class MyJob ...
-
安裝 NuGet 包:在 Visual Studio 中打開項目,右鍵單擊項目名稱,選擇“管理 NuGet 包”,搜索“Quartz”並安裝。
-
創建作業:創建一個實現了 IJob 介面的類,該介面包含一個 Execute 方法,該方法將在作業運行時調用。例如:
public class MyJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello, world!"); return Task.CompletedTask; } }
-
給Job傳遞數據:
// 創建一個JobDataMap對象 JobDataMap jobDataMap = new JobDataMap(); // 向JobDataMap中添加參數 jobDataMap.Add("param1", "Hello"); jobDataMap.Add("param2", "World"); // 創建一個JobDetail對象,設置JobDataMap JobDetail jobDetail = JobBuilder.Create<MyJob>() .UsingJobData(jobDataMap) .Build(); // 在Job類中獲取參數 public class MyJob : IJob { public void Execute(IJobExecutionContext context) { JobDataMap jobDataMap = context.JobDetail.JobDataMap; string param1 = jobDataMap.GetString("param1"); string param2 = jobDataMap.GetString("param2"); Console.WriteLine("{0} {1}", param1, param2); } }
註意:每次執行job時,都會創建一個新的job對象,並將JobDataMap中的數據傳遞給它。這意味著,即使您在job中存儲了一些狀態或數據,它們也不會在下一次執行job時保留。
- 創建觸發器:創建一個觸發器來指定何時運行作業。例如,以下觸發器將在每天上午 10 點運行作業:
ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithDailyTimeIntervalSchedule( x => x.OnEveryDay() .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 0)) ) .Build();也可以不使用WithDailyTimeIntervalSchedule,使用WithCronSchedule,例如:下麵是每天9點觸發
.WithCronSchedule(cron) //"0 0 9 * * ?"
這個表達式的含義是:
-
- 第一欄位:0,表示秒數為0。
- 第二欄位:0,表示分鐘數為0。
- 第三欄位:14,表示小時數為14,即下午2點。
- 第四欄位:*,表示每天都匹配。
- 第五欄位:*,表示每月都匹配。
- 第六欄位:?,表示不指定星期幾。
- 第七欄位:未使用。
-
創建調度器:使用 StdSchedulerFactory 創建調度器,並將作業和觸發器添加到調度器中:
ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler(); IJobDetail job = JobBuilder.Create<MyJob>() .WithIdentity("job1", "group1") .Build(); await scheduler.ScheduleJob(job, trigger);
-
運行作業:調用 Start 方法啟動調度器,使作業按照指定的觸發器運行:
await scheduler.Start();
註意:這裡只是啟動調度器,並不會立刻執行作業,需要觸發器觸發才會執行。