在 C# 项目里做任务调度时,Quartz.NET 和 Hangfire 是最常被提到的两个框架。它们都能处理定时任务和后台作业,但设计理念和适用场景差别明显。理解这些差异,能帮你在选型时少走弯路。

核心定位差异
Quartz.NET 源自 Java 的 Quartz,是一个功能完整的作业调度库。它强调对触发时间、日历、作业关系的精细控制,适合需要复杂调度逻辑的系统。
Hangfire 的设计目标是让开发者用最简单的方式把方法放进后台执行。它内置存储、重试、仪表盘,更像一个开箱即用的后台任务平台。
主要功能对比
| 维度 | Quartz.NET | Hangfire |
|---|---|---|
| 调度精度 | 支持 Cron、日历、秒级触发 | 支持延迟、周期、Cron |
| 持久化 | 需配置数据库或内存 | 默认支持多种数据库 |
| 仪表盘 | 无官方界面 | 自带 Dashboard |
| 分布式 | 依赖数据库锁 | 天然支持,基于存储 |
代码示例
Quartz.NET 创建作业
using Quartz;
using Quartz.Impl;
public class HelloJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Quartz 任务执行");
return Task.CompletedTask;
}
}
// 调度示例
var scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();
var job = JobBuilder.Create<HelloJob>().Build();
var trigger = TriggerBuilder.Create()
.WithCronSchedule("0/5 * * * * ?")
.Build();
await scheduler.ScheduleJob(job, trigger);
Hangfire 创建作业
using Hangfire;
// 启动后直接入队
BackgroundJob.Enqueue(() => Console.WriteLine("Hangfire 任务执行"));
// 定时周期任务
RecurringJob.AddOrUpdate(
"my-job",
() => Console.WriteLine("每分执行"),
Cron.Minutely);
如何选择
如果你的系统需要严格的时间控制、复杂的触发组合,或者已经熟悉 Quartz 体系,选 Quartz.NET 更合适。它不绑定特定 Web 环境,可嵌入任意程序。
如果你希望快速搭建后台任务系统,减少基础设施代码,且需要直观查看任务状态,Hangfire 是更省心的选择。它在 ASP.NET Core 中集成尤其简单。
小结
两者并非互斥。小型项目或重业务后台处理用 Hangfire 能提速;调度逻辑复杂、跨平台服务用 Quartz.NET 更稳。看清团队习惯与运维成本,才能选对工具。
Quartz_NETHangfireC#任务调度修改时间:2026-07-30 14:57:23