Quartz 调度程序未调用 Job 类

问题描述 投票:0回答:1

我对 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")
    }
}

c# .net-core c#-4.0 quartz-scheduler quartz.net
1个回答
0
投票

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.