C# (.NET) 任务调度器:Quartz.NET、Hangfire 和 Coravel

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

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

开始课程

C# (.NET) 任务调度器:Quartz.NET、Hangfire 和 Coravel



在现代 .NET 应用程序中,经常需要不仅根据用户请求执行代码,还要按计划执行:发送邮件简报、清理数据库、生成报告、与外部 API 同步。为此,需要使用任务调度器 (Job Schedulers)。在本文中,我们将介绍三种流行的 C# (.NET) 工具:Quartz.NET、Hangfire 和 Coravel,以及它们的特点、代码示例和使用场景。



为什么在 .NET 中需要任务调度器?

任务调度器允许:

  • 在特定时间执行后台任务(例如,每天 8:00)。
  • 按指定间隔重复任务(每 5 分钟)。
  • 处理任务队列,而不阻塞应用程序的主线程。
  • 轻松管理任务(添加、删除、暂停)。
  • 提供容错能力(出错时重试)。


1. Quartz.NET — 强大且灵活的调度器

Quartz.NET 是流行的 Java 框架 Quartz 在 .NET 上的移植版。它支持复杂的调度(cron 表达式)、集群、将任务持久化到数据库。适用于企业级项目。



安装

dotnet add package Quartzdotnet add package Quartz.Extensions.Hosting


示例:使用 cron 调度的任务

using Quartz;using Quartz.Impl;using System.Threading.Tasks;

public class EmailJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"在 {DateTime.Now} 发送邮件"); // 发送邮件的逻辑 await Task.CompletedTask; }}

// 在 Program.cs 中配置var scheduler = await StdSchedulerFactory.GetDefaultScheduler();await scheduler.Start();

var job = JobBuilder.Create<EmailJob>() .WithIdentity("emailJob", "group1") .Build();

var trigger = TriggerBuilder.Create() .WithIdentity("emailTrigger", "group1") .WithCronSchedule("0 0 8 * * ?") // 每天 8:00 .Build();

await scheduler.ScheduleJob(job, trigger);


特点

  • 支持 cron 表达式(灵活的调度)。
  • 适用于分布式系统的集群功能。
  • 持久化(重启后任务得以保留)。
  • 处理数千个任务时的高性能。


2. Hangfire — 简单易用且内置 UI

Hangfire 是一个配置极简且内置 Web 面板用于监控任务的调度器。非常适合需要快速集成的小型和中等规模项目。



安装

dotnet add package Hangfiredotnet add package Hangfire.SqlServer (用于数据库存储)


示例:带延迟和重复的简单任务

using Hangfire;using Hangfire.SqlServer;

// 在 Program.cs 中配置GlobalConfiguration.Configuration .UseSqlServerStorage("YourConnectionString");

app.UseHangfireServer();app.UseHangfireDashboard(); // 访问 /hangfire

// 创建任务BackgroundJob.Schedule(() => Console.WriteLine("延迟任务"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("daily-report", () => Console.WriteLine("每日报告"), Cron.Daily);


特点

  • 内置 Web 界面用于监控(无需额外依赖)。
  • 支持队列、重试和延迟任务。
  • 易于与 ASP.NET Core 集成。
  • 任务可存储在 SQL Server、Redis、PostgreSQL 中。


3. Coravel — 轻量且现代

Coravel 是一个受 Laravel 启发的 .NET 极简调度器。无需外部依赖

推荐