跳转到主要内容
杨月昌的软件博客
返回

FluentScheduler:C# 中的任务调度神器

在开发自动化任务时,很多开发者可能会遇到需要定时执行某些操作的场景。传统的做法是将程序打包成 EXE,然后使用 Windows Task Scheduler。然而,这种方案在处理“秒级”高频任务、动态任务修改或跨平台部署时显得力不从心。

今天推荐的 FluentScheduler 是一个轻量级、零依赖的 C# 任务调度库。它最大的特点是使用了 Fluent Interface(流式接口),让复杂的调度规则变得像写英语句子一样简单。


1. 核心架构与工作流程

FluentScheduler 的设计非常简洁,主要围绕三个核心组件展开:


2. 快速上手实战

步骤 A:定义具体任务

所有任务必须实现 IJob 接口。建议在 Execute 中添加 try-catch 块,防止单个任务崩溃导致整个进程受阻。

public class MyJob : IJob
{
    public void Execute()
    {
        // 建议添加日志记录和异常处理
        Console.WriteLine($"[Job Executed] 当前时间: {DateTime.Now}");
    }
}

步骤 B:配置调度注册表

这是 FluentScheduler 最迷人的地方,你可以用极度直观的语法定义规则:

public class MyRegistry : Registry
{ 
    public MyRegistry()
    {
        // 1. 立即执行,每 2 秒运行一次(高频任务)
        Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds(); 
        
        // 2. 指定时间执行(如每天晚上 9:15)
        Schedule(() => Console.WriteLine("每日结算任务开始..."))
            .ToRunEvery(1).Days().At(21, 15);
        
        // 3. 复杂周期:每个月第一个周一的凌晨 3:00
        Schedule<MyJob>().ToRunEvery(1).Months()
            .OnTheFirst(DayOfWeek.Monday).At(3, 0); 

        // 4. 任务链:MyJob 执行完后接着执行 MyOtherJob
        Schedule<MyJob>().AndThen<MyOtherJob>().ToRunEvery(5).Minutes();
    }
}

步骤 C:在应用中启动

对于 ASP.NET 或是桌面程序,在启动入口调用一次初始化即可:

// 初始化并加载注册表
JobManager.Initialize(new MyRegistry());

// 捕获任务异常的进阶配置
JobManager.JobException += info => 
    Logger.Error($"任务 {info.Name} 报错: {info.Exception}");

3. FluentScheduler vs 其他方案

特性Windows 任务计划Quartz.NETFluentScheduler
部署成本高(需操作操作系统)低(代码集成)极低(单文件引用)
调度精度分钟级毫秒级秒级
复杂度高(学习曲线陡峭)极低(流式语法)
存储支持注册表/文件支持数据库持久化仅限内存

4. 进阶:如何处理“任务重叠”?

如果一个任务每 5 秒运行一次,但任务本身执行了 10 秒,该库默认会并行运行。如果你希望同一时间只运行一个实例,可以这样配置:

// 确保任务在同一时间只有一个实例在运行(防止资源竞态)
Schedule<MyJob>().NonReentrant().ToRunEvery(5).Seconds();

5. 总结与温馨提示

FluentScheduler 是轻量级、内存级调度的最佳选择。它不需要配置数据库,不需要处理复杂的 Cron 表达式,非常适合后台简单的数据清理、状态检查或轻量级同步任务。

⚠️ 注意:该库目前在 GitHub 上已处于非活跃维护状态。对于极其复杂的、需要集群支持或任务持久化的企业级场景,建议关注 Quartz.NETHangfire。但对于大多数中小型项目,FluentScheduler 依然是性能与开发效率的平衡点。



上一篇
Python 算法实战:从初级到骨灰级的素数判定函数
下一篇
在 Windows 10 上搭建 React Native 开发环境与 Android 模拟器全攻略