💻 前言
卷了,卷了,卷了,最近太卷。。。这篇文章写了好几天了,由于同类型文章太多,排期到今天发布。实在不想卷,得罪了!各位定时任务开源大佬们!
.NET 定时组件生态实在太强大了,写下此文只希望能供大家多一个选择,不想重复造轮子,实在是事出有因。
高中读书那会,盛大传奇是最火爆的网络游戏,我和我的同学们都对它有过沉迷,甚至到上班几年之后,对它仍然有一种莫名的情怀。
干我们这行忙的时候要加班,闲的时候也很闲,在我曾经很闲的一份工作里,为了情怀去研究了传奇sf引擎,在简洁的脚本代码里我发现了一个宝藏:活动定时任务。除了以秒单位定时触发,还可以设置每月某天、每周某天、每天某时间,在 .net framework 3.0 普遍还在使用 Timer 的年代,我一下子被惊艳到了,于是利用 Timer 仿着功能自己实现了一版 .NET 定时任务功能类。
一开始只是一个类直接放进项目内使用,从未发布过 nuget 版本。打从 2016 年接触 .net core 以来,励志为开源生涯添砖加瓦,这才有了正式发布的念头。我曾经维护过 csredis(因原作者不维护所以发布为 CSRedisCore),呕心沥血从零到一开源 FreeSql,重构 RedisClient 发布的 FreeRedis,聊天架构 IMCore。。。等等。
因 FreeSql 使用需求编写了有趣的开源组件 IdleBus,写完后发现它的特点还蛮适合用来扩展定时任务,于时重构了一个版本命名 IdleScheduler,在 2020 年发布开源,前不久已正式改名为 FreeScheduler。
经历了十几年的使用需求和改造进化,实在是"食之无味,弃之可惜"。还是供大家多一个选择吧!
⛳ 主要优势
FreeScheduler 轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化),可按秒,每天/每周/每月固定时间,自定义间隔执行(CRON表达式),支持 .NET Framework 4.0,.NETCore2.1 +,Xamarin、MAUI 等平台 运行环境。
特色功能之一:FreeScheduler 支持一个任务设置 [5,5,30,30,60] 不同的定时间隔,任何一次成功都可结束整个任务。
scheduler.AddTask("比武大会", "json", new [] {
5, 5, 30, 30, 60 });
class MyTaskHandler : FreeScheduler.TaskHandlers.TestHandler
{
public override void OnExecuting(Scheduler scheduler, TaskInfo task)
{
Console.WriteLine($"[{
DateTime.Now.ToString("HH:mm:ss.fff")}] {
task.Topic} 被执行");
if (task.Topic == "比武大会")
{
try
{
//todo..
//任何一次不报错,强制使任务完成
task.Status = TaskStatus.Completed;
}
finaly
{
}
}
}
}
轻量化解释:了解 FreeRedis、FreeSql、csredis 的人都知道,我们发布的开源项目是绿色著称,零依赖发布后只有一个DLL,不会造成使用者项目依赖冲突,支持 .NET 4.0 堪称屎山项目的救星。现在还有很多.NET FX4.0 的项目,这些项目因历史遗留原因或硬件限制,不能更换 .NET Core 版本。因此这些项目很难使用到现有的开源库,不能使用可靠的开源库,那么很多时候都要自行实现,在堆积代码的同时,项目也有可能越来越乱,代码越来越渣,项目逐渐变得不稳定。
⚡ 快速开始
开源地址:https://github.com/2881099/FreeScheduler
演示代码:https://github.com/2881099/FreeScheduler/blob/master/Examples/Examples_FreeScheduler_WinformNet40/Form1.cs
dotnet add package FreeScheduler
或者