我对 C# 还很陌生,我正在尝试了解 Quartz 调度程序。我一直在尝试执行下面的代码,但我的疑问是为什么调度程序没有进入
HelloJob
类。我是不是做错了什么?
如果这是一个愚蠢的错误,我深表歉意,但现在一段时间以来我无法得到任何积极的结果。
这是我的代码:
public class Program
{
public static async Task Main(string[] args)
{
StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();
CancellationToken stoppingToken = CancellationToken.None;
await DoSomething(scheduler, stoppingToken);
}
public async Task DoSomething(IScheduler scheduler, CancellationToken ct)
{
var job = JobBuilder.Create<HelloJob>()
.WithIdentity("name", "group")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("name", "group")
.WithSimpleSchedule()
.StartNow()
.Build();
await Console.WriteLineAsync("Job is still in Main class")
await scheduler.ScheduleJob(job, trigger, ct);
}
}
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.WriteLineAsync("Job Entered HelloJob class")
}
}
Scheduler 还没有启动,需要调用它的
Start
方法。来自Quartz 文档:
IScheduler.Start
启动
的线程来触发触发器。当调度程序首次创建时,它处于“待机”模式,并且不会触发触发器。IScheduler
喜欢:
public static async Task Main(string[] args)
{
...
await DoSomething(scheduler, stoppingToken);
await scheduler.Start();
await Task.Delay(TimeSpan.FromSeconds(1));
await scheduler.Shutdown(true);
}