Quartz.NET 用于 C# (.NET):任务调度完整指南
\n\nQuartz.NET 是一个功能强大、灵活且广泛使用的开源任务调度库,适用于 .NET 应用程序。它允许开发者创建、管理和按计划执行后台任务。如果您需要在特定时间、以指定频率或响应某个事件(例如 Linux 中的 cron 作业)运行代码,Quartz.NET 是正确的选择。该库是流行的 Java 框架 Quartz Scheduler 的一个移植版本。
\n\n为什么需要它?在现代开发中,经常会出现不应根据用户请求同步执行的任务。这些任务可能包括发送邮件推送、清理临时文件、与外部 API 同步数据、生成报告、更新缓存等等。Quartz.NET 提供了一种可靠且容错的机制来执行此类任务。它支持将任务状态持久化到数据库(JobStore),从而能够在应用程序重启后恢复,并且支持集群以实现负载均衡。
\n\n与简单使用 System.Threading.Timer 或 BackgroundService 不同,Quartz.NET 提供了丰富的 API 来管理任务的生命周期、复杂的触发器(每日、每周、基于 CRON 表达式)、并行执行、事件监听等功能。这使其成为 .NET 生态系统中任务调度的事实标准。
安装
\nQuartz.NET 通过 NuGet 分发。要安装,请在包管理器控制台中使用以下命令之一:
\n\n# 安装主包\ndotnet add package Quartz\n\n# 如果您需要 XML 配置支持\ndotnet add package Quartz.Plugins\n\n# 用于依赖注入(推荐用于 ASP.NET Core)\ndotnet add package Quartz.Extensions.Hosting\n\n\n对于经典 .NET Framework(例如 .NET 4.8),请使用 NuGet 控制台:
\nInstall-Package Quartz\n\n\n快速入门:最小工作示例
\n让我们创建一个简单的控制台应用程序,它将每 5 秒输出 "Hello, Quartz!"。
\n\nusing System;\nusing System.Threading.Tasks;\nusing Quartz;\nusing Quartz.Impl;\n\nnamespace QuartzQuickStart\n{\n // 1. 创建 Job(任务)\n public class HelloJob : IJob\n {\n public async Task Execute(IJobExecutionContext context)\n {\n await Console.Out.WriteLineAsync($"Hello, Quartz! 时间: {DateTime.Now:HH:mm:ss}");\n }\n }\n\n class Program\n {\n static async Task Main(string[] args)\n {\n // 2. 创建调度器工厂\n StdSchedulerFactory factory = new StdSchedulerFactory();\n\n // 3. 获取调度器\n IScheduler scheduler = await factory.GetScheduler();\n\n // 4. 启动调度器\n await scheduler.Start();\n\n // 5. 定义任务(Job)\n IJobDetail job = JobBuilder.Create()\n .WithIdentity("myJob", "group1")\n .Build();\n\n // 6. 定义触发器(调度计划)\n ITrigger trigger = TriggerBuilder.Create()\n .WithIdentity("myTrigger", "group1")\n .StartNow()\n .WithSimpleSchedule(x => x\n .WithIntervalInSeconds(5)\n .RepeatForever())\n .Build();\n\n // 7. 在调度器中注册任务和触发器\n await scheduler.ScheduleJob(job, trigger);\n\n // 8. 等待,以免控制台关闭\n await Task.Delay(TimeSpan.FromSeconds(30));\n\n // 9. 停止调度器\n await scheduler.Shutdown();