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

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

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

开始课程

C# (.NET) 任务调度器:概览与示例



在现代 C# (.NET) 开发中,经常需要按计划执行代码:发送邮件推送、更新缓存、归档日志或启动 ETL 流程。为此,存在专门的库——任务调度器 (Job Schedulers)。本文将介绍三种流行的解决方案:Quartz.NET、Hangfire 和 Coravel,并提供使用示例。



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



Quartz.NET 是流行 Java 框架 Quartz 的移植版本。它支持使用 cron 表达式进行复杂调度、任务持久化到数据库、集群以及触发器。



安装

dotnet add package Quartz


示例:带 cron 调度的简单任务

using Quartz;using Quartz.Impl;

public class HelloJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"你好!时间:{DateTime.Now}"); }}

// 配置调度器ISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler = await schedulerFactory.GetScheduler();

// 定义任务IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "group1") .Build();

// 触发器:每 10 秒ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/10 * * * * ?") // 每 10 秒 .ForJob(job) .Build();

await scheduler.ScheduleJob(job, trigger);await scheduler.Start();


特点:

  • 支持 cron 表达式(例如 0 0 12 * * ?——每天中午)。
  • 任务存储于 ADO.NET(SQL Server、PostgreSQL、MySQL)。
  • 支持动态创建/删除任务。
  • 集群支持以实现高可用性。


2. Hangfire——简单易用,内置仪表盘



Hangfire 是一个以最少配置执行后台任务的库。它提供内置的 Web 仪表盘用于监控、错误重试以及与 ASP.NET Core 的集成。



安装

dotnet add package Hangfiredotnet add package Hangfire.SqlServer # 用于存储在 SQL Server 中


示例:延迟任务与周期性任务

using Hangfire;

// 在 Startup.cs 中配置public void ConfigureServices(IServiceCollection services){ services.AddHangfire(config => config.UseSqlServerStorage("connection_string")); services.AddHangfireServer();}

public void Configure(IApplicationBuilder app){ app.UseHangfireDashboard(); // /hangfire // 周期性任务:每 5 分钟 RecurringJob.AddOrUpdate( "cleanup-cache", () => Console.WriteLine("清理缓存..."), "*/5 * * * *"); // 延迟任务(1 小时后) BackgroundJob.Schedule( () => SendEmail("user@example.com"), TimeSpan.FromHours(1));}

public void SendEmail(string email){ Console.WriteLine($"发送邮件至 {email}");}


优势:

  • 内置仪表盘(/hangfire)用于查看任务状态。
  • 失败时自动重试。
  • 支持队列(默认使用 Redis 或 SQL Server)。
  • 通过 DI 与 ASP.NET Core 轻松集成。


3. Coravel——轻量级 .NET Core 调度器



Coravel 是一个极简库,无需外部依赖(仅需 .NET 本身)。它非常适合不需要持久化的小型项目。



安装

dotnet add                    

推荐