摘要:public class MyBackgroundService : BackgroundService{protected override async Task ExecuteAsync(CancellationToken stoppingToken){w
在企业级应用开发中,后台任务调度(Background Task Scheduling)是一个高频需求:
• 定时生成报表
• 异步队列任务
• 延迟发送邮件/短信
• 数据清理、缓存刷新
• 跨时区任务执行
在 .NET 生态中,常见的后台任务调度方案主要有以下几个
简介
ASP.NET Core 内置了BackgroundService与IHostedService,可以在应用生命周期内运行持续或定时的后台任务。✨ 特点
• ✅ 轻量,无额外依赖
• ✅ 与宿主生命周期完美结合
• ❌ 需要自己写循环/定时逻辑
• ❌ 无持久化、无失败重试、无监控
适用场景
简单的后台轮询、心跳检测、缓存刷新。
文章地址
最小示例
public class MyBackgroundService : BackgroundService{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine($"任务执行时间: {DateTime.Now}");
await Task.Delay(5000, stoppingToken);
}
}
}
// 注册服务
builder.Services.AddHostedService
简介
Hangfire 是成熟的 .NET 后台任务框架,支持 任务持久化、失败重试、分布式执行,并自带可视化 Dashboard。
✨ 特点
• ✅ 持久化(SQL Server、Redis 等)
• ✅ Dashboard 可视化监控任务
• ✅ 支持即时、延时、周期任务
• ❌ 依赖数据库,配置稍复杂
• ❌ 小项目可能有点重
适用场景
企业级应用,要求 可视化、分布式、失败重试。
文章地址
简介
Quartz.NET 是历史悠久的调度框架,类似 Java 的 Quartz,功能非常全面。
✨ 特点
• ✅ 支持 Cron 表达式,调度灵活
• ✅ 支持 Trigger/Job/Calendar 复杂组合
• ✅ 支持持久化、集群
• ❌ 学习曲线较陡峭
• ❌ 小项目可能过度设计
适用场景
金融、物流、报表等 复杂调度场景。
文章地址
简介
Coravel 是一个轻量级的 .NET 后台任务与调度框架,配置简洁,几乎零依赖。
✨ 特点
• ✅ Fluent API,优雅易用
• ✅ 支持定时任务、队列、缓存、事件总线
• ✅ 无需数据库,轻量灵活
• ❌ 无 Dashboard(可扩展)
• ❌ 功能深度不如 Hangfire/Quartz
适用场景
中小型项目,快速实现定时任务。
文章地址
最小示例
using Coravel;using Coravel.Scheduling.Schedule.Interfaces;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScheduler;
var app = builder.Build;
// 定义调度任务
app.Services.UseScheduler(scheduler =>
{
scheduler.Schedule( =>
Console.WriteLine($"Coravel 执行任务: {DateTime.Now}")
).EveryMinute;
});
app.Run;
简介
Sundial 是一个功能齐全的 .NET 分布式作业调度系统,支持丰富的调度方式和集群管理。
框架 难度 功能丰富度 持久化 可视化监控 适用场景 BackgroundService⭐ ⭐ ❌ ❌ 简单后台服务 Hangfire⭐⭐⭐ ⭐⭐⭐⭐ ✅ ✅ 企业级任务队列 Quartz.NET⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ✅ ❌ 复杂调度系统 Coravel⭐⭐ ⭐⭐⭐ ❌ ❌ 轻量级任务调度 Sundial⭐⭐⭐ ⭐⭐⭐⭐ ✅ ✅ 分布式调度系统来源:opendotnet