在 .NET 高性能与云原生场景下,任务调度库的选型直接影响应用的启动速度、内存占用和可观测性。TickerQ 正是为此而生:一个零反射、完全 AOT 就绪的现代任务调度库,内置实时仪表盘,无需付费插件。
GitHub: github.com/Arcenox-co/TickerQ [1]
文档: tickerq.net [2]
License: MIT / Apache 2.0 | 作者: Arcenox LLC
核心亮点
| 特性 |
说明 |
| ⚡ 零反射 / AOT 就绪 |
编译期通过 Source Generator 注册任务,无运行时反射,完全可 Trimmable |
| 📅 Cron + 时间调度 |
支持标准 5/6 位 Cron 表达式、单次/循环任务、精确间隔 |
| 💾 双持久化 |
EF Core(PG / SQL Server / SQLite / MySQL)或 Redis,无需额外存储 |
| 📊 实时仪表盘 |
内置 Vue.js + SignalR Dashboard,可查看/触发/取消任务,无需付费插件 |
| 🔄 重试 & 限流 |
可配置退避重试策略 + 并发执行上限 |
| 🌐 多节点分布式 |
Redis 心跳 + 死节点清理 + 锁协调,横向扩展只需加实例 |
| 🔗 任务链 |
原生支持 parent/child 任务链(Job Chaining) |
| 🧬 DI 优先 |
与 .NET DI 深度集成,构造函数注入随心所欲 |
与主流方案对比
|
TickerQ |
Quartz.NET |
Hangfire |
| AOT 支持 |
✅ 原生 |
❌ |
❌ |
| 任务发现 |
源生成器(编译时) |
反射(运行时) |
反射(运行时) |
| Cron |
✅ |
✅ |
✅ + Recurring |
| 仪表盘 |
✅ 内置 |
❌(需第三方) |
✅ 内置 |
| 持久化 |
EF Core / Redis |
ADO.NET |
SQL Server / Redis |
| 开源 |
✅ 完全 |
✅ |
⚠️ 部分 Pro 收费 |

5 分钟快速上手
1️⃣ 安装
dotnet add package TickerQ
dotnet add package TickerQ.EntityFrameworkCore # EF Core 持久化
# 或
dotnet add package TickerQ.Caching.StackExchangeRedis # Redis 持久化
2️⃣ 注册服务(Program.cs)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTickerQ(options =>
{
options.UseEfCorePersistence<AppDbContext>();
// options.WithExecutionTimeout(TimeSpan.FromMinutes(5));
// options.WithConcurrencyLimit(10);
// options.WithRetryPolicy(maxRetries: 3, delayBetweenRetries: TimeSpan.FromSeconds(10));
});
var app = builder.Build();
app.UseTickerQ(); // 启用调度器
app.UseTickerQDashboard(); // 启用仪表盘(访问 /tickerq)
app.Run();
3️⃣ 定义任务
using TickerQ.Utilities.Base;
public class MyJobs
{
[TickerFunction("HelloWorld", Cron = "0 * * * *")] // 每小时执行
public async Task HelloWorld(TickerFunctionContext context, CancellationToken ct)
{
Console.WriteLine($"Hello from TickerQ! Job ID: {context.Id}");
}
[TickerFunction("DelayedTask")]
public async Task DelayedTask(TickerFunctionContext context, CancellationToken ct)
{
await Task.Delay(2000, ct);
Console.WriteLine("2 秒后执行!");
}
}
4️⃣ 调度任务
public class MyService(ITimeTickerManager<TimeTickerEntity> manager)
{
public async Task Schedule()
{
await manager.AddAsync(new TimeTickerEntity
{
Function = "HelloWorld",
ExecutionTime = DateTime.UtcNow.AddSeconds(10)
});
}
}
启动应用后访问 /tickerq 即可打开实时仪表盘 🎯
项目结构
src/
├── TickerQ/ # 核心(零反射调度引擎)
├── TickerQ.EntityFrameworkCore/ # EF Core 持久化
├── TickerQ.Caching.StackExchangeRedis/ # Redis 持久化
├── TickerQ.Dashboard/ # SignalR + Vue.js 仪表盘
└── samples/ # 示例项目
⚠️ 自 v2.2.0 起所有包统一版本号,请确保一起更新。
适用场景
| 场景 |
推荐度 |
| 🏢 企业级定时任务 / Cron 调度 |
⭐⭐⭐⭐⭐ |
| 📧 邮件发送、报表生成、数据同步 |
⭐⭐⭐⭐⭐ |
| 🖥️ 需要实时监控的后台服务 |
⭐⭐⭐⭐⭐ |
| 🌐 多实例分布式任务协调 |
⭐⭐⭐⭐ |
| 🔬 AOT / Native AOT 部署 |
⭐⭐⭐⭐⭐(Quartz/Hangfire 做不到) |
总结:如果你在 .NET 8/9 上需要一个高性能、零反射、自带仪表盘的现代任务调度方案,TickerQ 就是目前最优解之一。 🔥
本文由云栈社区整理发布,欢迎更多 .NET 技术交流。
|