Quartz.NET 用于 C# (.NET):完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Quartz.NET 用于 C# (.NET):任务调度完整指南

\n\n

Quartz.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 生态系统中任务调度的事实标准。

\n\n

安装

\n

Quartz.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 控制台:

\n
Install-Package Quartz\n
\n\n

快速入门:最小工作示例

\n

让我们创建一个简单的控制台应用程序,它将每 5 秒输出 "Hello, Quartz!"。

\n\n
using 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();                    

推荐