# FluentSchedulerDemo **Repository Path**: yus1977/fluent-scheduler-demo ## Basic Information - **Project Name**: FluentSchedulerDemo - **Description**: FluentScheduler: 非常简单,且功能丰富的任务调度框架。使用起来非常方便 学习示例 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-02-04 - **Last Updated**: 2023-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README >非常简单,且功能丰富的任务调度框架。使用起来非常方便 GitHub:https://github.com/fluentscheduler/FluentScheduler 手册: https://fluentscheduler.github.io/ ## 使用方法 框架使用起来十分方便,主要有两种使用方法 ### 方法一:快速使用 下面的代码,创建了一个每分钟执行一次的任务。 ```C# JobManager.Initialize(); JobManager.AddJob( () => Console.WriteLine("5 minutes just passed."), s => s.ToRunEvery(5).Minutes() ); ``` ### 方法二:创建Registry类,在Registry类定义Job的调度计划 比如: ```C# //定义任务计划 public class MyRegistry : Registry { public MyRegistry() { //5分钟周期任务 FiveMinutes(); //类型化任务 Parameter(); .... } private void Parameter() { //向任务传递参数 //任务为具体的类ParameterJob,继承自IJob //通过属性传递参数 Schedule(new ParameterJob { Parameter = "Foo" }).WithName("Parameter").ToRunOnceIn(10).Seconds(); } } .... /// /// 类型化的Job,继承自IJob,需要有无参默认构造函数 /// public class ParameterJob : IJob { public string Parameter { get; set; } public void Execute() => Logger.Information($"Parameter: executed with parameter \"{Parameter}\""); } ....... //启动任务调度 JobManager.Initialize(new MyRegistry()); ``` ### 定时的分类 - 立即执行计划任务:ToRunNow() - 延迟一个指定时间执行一次:ToRunOnceIn(10)。 - 指定时间间隔执行:ToRunEvery(n)。 时间单位可以是毫秒、秒、分钟、小时、天、工作日、周 - 指定具体的时间点: At()。比如“每天的下午 1:10 分执行”、“每一个月的第一个星期的星期五 的15:00执行”等 ### 任务并发 - **并行任务:** 默认的任务是可以并发的,如果一周期任务,上一次还没有执行完成,下次启动的时间到达时,下一个任务会启动。 - **非并行任务:** 通过NonReentrant()可以防止任务并发,只有上一次执行的任务结束后,下一次任务才会开始执行。