.NET 定时执行工具 - FluentScheduler
DEMO---------------------
Install-Package FluentScheduler
public class Demo : Registry { public Demo() { // Schedule an IJob to run at an interval // 立即执行每两秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。) Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds(); // Schedule an IJob to run once, delayed by a specific time interval // 延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。) Schedule<MyJob>().ToRunOnceIn(5).Seconds(); // Schedule a simple job to run at a specific time // 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行) Schedule(() => Trace.WriteLine("It's 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10); Schedule(() => { // 做你想做的事儿。 Trace.WriteLine("It's 1:10 PM now."); }).ToRunEvery(1).Days().At(13, 10); // Schedule a more complex action to run immediately and on an monthly interval // 立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!) Schedule<MyComplexJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0); // Schedule multiple jobs to be run in a single schedule // 在同一个计划中执行两个(多个)任务 Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes(); } } public class MyJob : IJob { void IJob.Execute() { Trace.WriteLine("现在时间是:"+DateTime.Now); } } public class MyOtherJob : IJob { void IJob.Execute() { Trace.WriteLine("这是另一个 Job ,现在时间是:" + DateTime.Now); } } public class MyComplexJob : IJob { void IJob.Execute() { Trace.WriteLine("这是比较复杂的 Job ,现在时间是:" + DateTime.Now); } }
Global.cs 里执行
JobManager.Initialize(new Demo());
JobManager: 一个全局管理任务的静态类, 用于添加/删除所有的<任务计划>, 并全局开启和关闭. 也可以获取某一个指定的<任务计划>
Schedule: 一个<计划>, 用来描述一个<任务>到底需要怎么样的规则去执行
Job: <任务>, 它的 Execute 方法里描述了具体怎么样完成任务
public class MyJob2 : IJob { string str = ""; public MyJob2(string s) { str = s; } //任务的执行规则, 也叫计划 public Action<Schedule> Schedule = (Schedule s) => { s.WithName("kkk"); s.ToRunNow().AndEvery(2).Seconds(); }; // 具体的任务 public void Execute() { Trace.WriteLine("参数:" + str); } } // 可以在一开始就开启 一个空的任务计划管理 JobManager.Initialize(); var job = new MyJob2("33333"); // AddJob 实际上是添加一个<任务>和<计划> JobManager.AddJob(job, job.Schedule);