LXL_Timed_Scheduling 1.1.2

dotnet add package LXL_Timed_Scheduling --version 1.1.2
                    
NuGet\Install-Package LXL_Timed_Scheduling -Version 1.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LXL_Timed_Scheduling" Version="1.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LXL_Timed_Scheduling" Version="1.1.2" />
                    
Directory.Packages.props
<PackageReference Include="LXL_Timed_Scheduling" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LXL_Timed_Scheduling --version 1.1.2
                    
#r "nuget: LXL_Timed_Scheduling, 1.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=LXL_Timed_Scheduling&version=1.1.2
                    
Install LXL_Timed_Scheduling as a Cake Addin
#tool nuget:?package=LXL_Timed_Scheduling&version=1.1.2
                    
Install LXL_Timed_Scheduling as a Cake Tool

LXL_Timed_Scheduling 定时任务调度器

一个轻量级、可扩展的定时任务调度库,适用于 .NET 应用中各种周期性任务场景,支持按日、月、周、季度、分钟、小时等方式执行任务,并自动记录日志和异常信息。


✨ 特性

  • 🕰 支持多种调度方式:每日、每月、每周、每季度、每分钟、每小时等
  • ⚙️ 基于 System.Threading.Timer 实现,轻量级高性能
  • 📜 自动记录任务执行日志(开始、成功、失败、异常等)
  • 🧩 提供 TaskHelper 简化带日志的同步/异步任务执行
  • 🧾 包含 TabHelper 提供 DataTable → 实体类等辅助工具
  • 🛠 任务触发机制灵活,支持秒数容错、按季度仅触发一次等配置

🚀 快速开始

安装 NuGet 包

dotnet add package LXL_Timed_Scheduling

定时任务调度
var scheduler = new UnifiedTaskScheduler();

// 每日 8:30 执行
scheduler.TryTriggerTask(
    taskName: "DailyReport",
    hour: 8, minute: 30, second: 0,
    action: () => ReportService.Generate()
);
支持的参数包括:

指定执行时间(时/分/秒)

指定日、月、周、季度条件

间隔分钟/小时执行

是否每季度仅触发一次

秒数误差范围(默认 ±5 秒)

📅 调度方式示例
var scheduler = new UnifiedTaskScheduler();

// 每日任务(每天 14:30)
scheduler.TryTriggerTask("每日任务", 14, 30, 0, () => { /* 逻辑 */ });

// 每周一 2:00 执行
scheduler.TryTriggerTask("周备份", 2, 0, 0, () => BackupService.Run(), dayOfWeek: DayOfWeek.Monday);

// 每月 1 号 3:30 执行
scheduler.TryTriggerTask("月结算", 3, 30, 0, () => AccountingService.Settle(), day: 1);

// 每季度首日 4:00 执行,仅执行一次
scheduler.TryTriggerTask("季度归档", 4, 0, 0, () => ArchiveService.Run(), oncePerQuarter: true);

// 每分钟执行(每分钟第 0 秒)
scheduler.TryTriggerTask("心跳检测", 0, 0, 0, () => Heartbeat.Ping(), intervalMinutes: 1);

// 每小时执行(第 15 分钟)
scheduler.TryTriggerTask("小时任务", 0, 15, 0, () => DoHourlyWork(), intervalHours: 1);

📓 日志与异常
[2025-04-01 08:30:00.123] [START] [DailyReport] 任务开始执行
[2025-04-01 08:30:02.456] [SUCCESS] [DailyReport] 任务成功完成
发生异常:
scheduler.TryTriggerTask("异常任务", 10, 0, 0, () => throw new Exception("出错啦"));
[2025-04-01 10:00:00.789] [ERROR] [异常任务] 任务失败: 出错啦
[异常层级 0] System.Exception
消息: 出错啦
堆栈: ...

🧰 TaskHelper 辅助类
统一包装任务执行流程,自动记录日志:
// 同步执行
TaskHelper.ExecuteWithLog("同步任务", () => DoSomething());

// 异步执行
TaskHelper.RunWithLog("异步任务", async () => await DoSomethingAsync());

🧾 TabHelper 工具类
提供 DataTable → 实体类转换、集合分组等通用方法:
// DataTable 转实体集合
List<MyModel> list = dataTable.ToModels<MyModel>();

// 单行 DataRow 转实体
MyModel model = row.ToModel<MyModel>();

// 集合分组
var groups = list.SplitWithCount(100);  // 每组 100 条

⚙️ 可选配置(示例)
var options = new TaskSchedulerOptions {
    LogDirectory = "D:/logs",
    MaxConcurrentTasks = 5,
    TimeZone = TimeZoneInfo.Local
};

var scheduler = new UnifiedTaskScheduler(options);

📦 文件结构说明
UnifiedTaskScheduler.cs:主调度器,包含任务触发逻辑

TaskSchedulerLogger.cs:任务日志管理器

TaskHelper.cs:提供带日志的任务执行方法(支持异步)

TabHelper.cs:DataTable/集合辅助工具类

🏁 结语
LXL_Timed_Scheduling 提供了一种灵活、易用、低依赖的定时任务解决方案。适用于各种后台任务、定期报表、同步操作等场景!

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.2 177 4/15/2025
1.1.1 176 4/14/2025
1.1.0 172 4/14/2025
1.0.0 177 4/14/2025