C#中Quartz Scheduler未调用HelloJob类的问题排查
Quartz调度器未执行HelloJob的问题修复
你的代码存在几个关键问题,导致任务无法执行:
调度器未启动
Quartz调度器创建后默认处于暂停状态,必须调用await scheduler.Start(ct)才能开始触发任务。你的代码仅完成了任务和触发器的调度,但未启动调度器。主线程提前终止
Main方法执行完DoSomething后会立即退出程序,调度器还没来得及执行任务就被销毁。需要让主线程保持存活,给任务执行的时间。语法与调用错误
- 所有
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
相关产品推荐
相关产品推荐

