C# 排程套件: Quartz

Quartz 套件

簡介

Quartz是個排程套件

安裝

1
$ install-package Quartz

建立Job

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace ConsoleApplication1
{
    using System;
    using Quartz;

    [DisallowConcurrentExecution]
    internal class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("do job");
        }
    }
}

建立排程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
namespace ConsoleApplication1
{
    using Quartz;
    using Quartz.Impl;

    internal class Program
    {
        private static void Main(string[] args)
        {
            // 建立排程器
            var schedulerFactory = new StdSchedulerFactory();
            var schedular = schedulerFactory.GetScheduler();

            // 建立Job
            IJobDetail job = JobBuilder.Create<MyJob>()
                .WithIdentity("MyJob")
                .Build();

            // 建立Trigger
            ITrigger trigger = TriggerBuilder.Create()
                .WithCronSchedule("0 0/1 * * * ?")
                .WithIdentity("MyJobTrigger")
                .Build();

            // Job配對Trigger
            schedular.ScheduleJob(job, trigger);

            // 啟動排程器
            schedular.Start();
        }
    }
}

注意事項

  • 排程是固定周期觸發,和Job的執行時間無關
  • 每次觸發都會重新建立一個全新的Job物件
  • 在Job上加入DisallowConcurrentExecution來限制每次只能執行一個Job