You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Quartz Scheduler未调用HelloJob类的问题排查

Quartz调度器未执行HelloJob的问题修复

你的代码存在几个关键问题,导致任务无法执行:

  1. 调度器未启动
    Quartz调度器创建后默认处于暂停状态,必须调用await scheduler.Start(ct)才能开始触发任务。你的代码仅完成了任务和触发器的调度,但未启动调度器。

  2. 主线程提前终止
    Main方法执行完DoSomething后会立即退出程序,调度器还没来得及执行任务就被销毁。需要让主线程保持存活,给任务执行的时间。

  3. 语法与调用错误

  • 所有await Console.WriteLineAsync(...)语句末尾缺少分号,会导致编译失败;
  • DoSomething是实例方法,静态的Main方法无法直接调用,需改为静态方法。

修复后的完整代码:

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);

        // 保持主线程运行,等待任务执行
        Console.WriteLine("按任意键退出...");
        Console.ReadKey();
    }

    // 修改为静态方法,供Main调用
    public static 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.Start(ct);
        await scheduler.ScheduleJob(job, trigger, ct);
    }
}

public class HelloJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        await Console.WriteLineAsync("Job Entered HelloJob class");
    }
}

运行修复后的代码,你就能看到HelloJob的执行日志了。

内容的提问来源于stack exchange,提问作者Jithin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:07:44