.NET定时任务执行管理器开源组件–FluentScheduler

在日常项目里通常会遇到定时执行任务的需求,也就是定时器。.NET Framework里关于定时器的类有3个,分别是System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer。这三个类用法灵活,也各有特点,应对简单的定时需求,用起来很轻松。如果面对复杂应用,比如任务影响窗体UI时就 要考虑多线程操作,多线程就避免不了考虑线程安全问题,这时候用起来就比较麻烦。 
使用FluentScheduler组件,相对来说就轻松多了。FluentScheduler 是一个更精密和复杂的调度组件,它采用多线程操作,不会影响主线程,在线程安全方面它也有很好的处理,任务运行时还可以显式控制。FluentScheduler用起来也很简单,在GitHub上有应用示例FluentScheduler。这里举个简单应用示例。

  1. 获取FluentScheduler Package 
    首先可以使用Nuget程序包管理器获取FluentScheduler Package,在Nuget程序包管理器控制台中输入命令:Install-Package FluentScheduler,然后回车键即可。如图所示 
    通过NuGet获取FluentScheduler
  2. 创建定时任务
Registry registry = new Registry();
registry.Schedule(()=>
WriteDateTimeString()).WithName("WriteTimeString").ToRunNow().AndEvery(2).Seconds();
JobManager.Initialize(registry);

 

这里WriteDateTimeString()是自定义的方法,也就是定时执行的任务,其中WithName(“WriteTimeString”)中的WriteTimeString是给这个定时任务唯一ID,这个任务ID是用于显示控制任务,后面终止任务会用到。AndEvery(2).Seconds()意思是立即执行,而且每间隔2秒执行一遍。最后还需要JobManager.Initialize()函数初始化任务列表,Registry类是用于注册一个或多个任务,JobManager.Initialize之后,定时任务就立即执行。刚才提到的WriteDateTimeString()代码如下:

        private void WriteDateTimeString()
        {
            SetText(DateTime.Now.ToString() + " 正在执行任务\n");
        }

        private void SetText(string text)
        {          
            if (this.richTextBox1.InvokeRequired)
            {
                Action<string> setTextCallBack =SetText;       
                this.Invoke(setTextCallBack, new object[] { text });
            }
            else
            {
                this.richTextBox1.AppendText(text);
            }
        }

 

3.终止任务 
终止任务很简单,就一行代码:

JobManager.RemoveJob("WriteTimeString");

整个例子运行截图如下图: 
运行截图

4.需要注意的地方 
FluentScheduler 目前的版本FluentScheduler 5.0.0(2016年7月20日发布),使用函数与之前的版本略微有点不同。之前版本,使用TaskManager进行任务管理,5.0.0版使用JobManager管理任务。 
5.示例代码地址 
FluentScheduler 使用示例

posted @ 2016-12-28 18:09  左正  阅读(744)  评论(0编辑  收藏  举报