在你可以使用调度器之前,它需要被实例化(谁会猜到?)。 为此,您使用 ISchedulerFactory 的实现者。

    一旦调度程序被实例化,它就可以启动、置于待机模式和关闭。 请注意,一旦调度程序关闭,如果不重新实例化,它就无法重新启动。 在调度程序启动之前,触发器不会触发(作业不会执行),也不会在它处于暂停状态时触发。

    这是一个快速的代码片段,它实例化并启动一个调度程序,并安排一个作业执行:

    使用 Quartz.NET

    1. // construct a scheduler factory using defaults
    2. StdSchedulerFactory factory = new StdSchedulerFactory();
    3. // get a scheduler
    4. IScheduler scheduler = await factory.GetScheduler();
    5. await scheduler.Start();
    6. // define the job and tie it to our HelloJob class
    7. IJobDetail job = JobBuilder.Create<HelloJob>()
    8. .WithIdentity("myJob", "group1")
    9. .Build();
    10. // Trigger the job to run now, and then every 40 seconds
    11. ITrigger trigger = TriggerBuilder.Create()
    12. .WithIdentity("myTrigger", "group1")
    13. .StartNow()
    14. .WithSimpleSchedule(x => x
    15. .WithIntervalInSeconds(40)
    16. .RepeatForever())
    17. .Build();
    18. await scheduler.ScheduleJob(job, trigger);
    19. // You could also schedule multiple triggers for the same job with
    20. // await scheduler.ScheduleJob(job, new List<ITrigger>() { trigger1, trigger2 }, replace: true);

    使用 fluent API 配置调度程序

    您还可以使用 SchedulerBuilder fluent API 以编程方式配置调度程序的不同方面。

    1. var sched = await SchedulerBuilder.Create()
    2. // default max concurrency is 10
    3. .UseDefaultThreadPool(x => x.MaxConcurrency = 5)
    4. // this is the default
    5. // .WithMisfireThreshold(TimeSpan.FromSeconds(60))
    6. .UsePersistentStore(x =>
    7. {
    8. // force job data map values to be considered as strings
    9. // prevents nasty surprises if object is accidentally serialized and then
    10. // serialization format breaks, defaults to false
    11. x.UseProperties = true;
    12. x.UseClustering();
    13. x.UseSqlServer("my connection string");
    14. // this requires Quartz.Serialization.Json NuGet package
    15. x.UseJsonSerializer();
    16. })
    17. // job initialization plugin handles our xml reading, without it defaults are used
    18. // requires Quartz.Plugins NuGet package
    19. .UseXmlSchedulingConfiguration(x =>
    20. {
    21. x.Files = new[] { "~/quartz_jobs.xml" };
    22. // this is the default
    23. x.FailOnFileNotFound = true;
    24. // this is not the default
    25. x.FailOnSchedulingError = true;
    26. })
    27. .BuildScheduler();
    28. await scheduler.Start();

    如您所见,使用 Quartz.NET 相当简单。 在第 2 课中,我们将简要介绍作业和触发器,以便您更全面地理解这个示例。