AddQuartz与AddQuartzHostedService的区别及使用场景咨询
AddQuartz与AddQuartzHostedService的区别澄清
1. 你的理解确认
你的理解完全正确:
AddQuartz:负责向.NET依赖注入容器注册并配置Quartz调度器的核心组件,包括调度器实例、作业、触发器、JobFactory等,完成Quartz的基础初始化与配置,但此时调度器不会自动启动。AddQuartzHostedService:将已配置好的Quartz调度器包装成.NET的托管服务(IHostedService),让调度器的生命周期与应用进程绑定——应用启动时自动启动调度器,应用关闭时自动停止调度器。
2. 单独使用AddQuartz的场景
当你不需要调度器随应用进程自动启停,而是希望手动控制调度器生命周期时,就会单独用AddQuartz,典型场景包括:
- 按需启停调度器:比如Web应用中,只有用户触发特定操作(如点击"启动定时任务"按钮)后才启动调度器,完成任务后手动停止。
- 控制台工具的手动控制:编写控制台程序时,通过命令行参数或交互逻辑决定是否启动调度器,或在运行过程中动态启停。
- 自定义生命周期绑定:将调度器的生命周期与某个业务模块绑定,而非整个应用进程——比如某个服务类初始化时启动调度器,服务销毁时停止。
举个手动控制的简单示例:
// 仅注册并配置Quartz builder.Services.AddQuartz(q => { q.AddJob<MyScheduledJob>(j => j.WithIdentity("MyJob")); q.AddTrigger(t => t .ForJob("MyJob") .WithIdentity("MyTrigger") .WithSimpleSchedule(s => s.WithIntervalInSeconds(10).RepeatForever())); }); // 在业务逻辑中手动获取并控制调度器 var schedulerFactory = serviceProvider.GetRequiredService<ISchedulerFactory>(); var scheduler = await schedulerFactory.GetScheduler(); // 手动启动 await scheduler.Start(); // 执行业务逻辑后手动停止 await scheduler.Shutdown();
内容的提问来源于stack exchange,提问作者Elon Obama
相关产品推荐
相关产品推荐

