C#作业调度FluentScheduler学习笔记

一、简介

FluentScheduler是一个简单的任务调度框架,定时任务管理器。

GitHub地址:https://github.com/fluentscheduler/FluentScheduler

二、示例程序

2.1、界面

新建一个WinForm程序FluentSchedulerClient,项目右键->属性->应用程序->输出类型,选择控制台应用程序。

2.2、引用

项目右键->管理 NuGet 程序包->FluentScheduler。

2.3、作业

新建一个类DataSyncJob并继承IJob,代表它是一个作业,同时实现IJob.Execute方法。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using FluentScheduler;namespace LinkTo.Test.FluentSchedulerClient{    public class DataSyncJob : IJob    {        void IJob.Execute()        {            Console.WriteLine($"This is DataSyncService submmit...:{Guid.NewGuid().ToString("N")}");        }    }}

同上,再建一个作业TestJob:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using FluentScheduler;namespace LinkTo.Test.FluentSchedulerClient{    public class TestJob : IJob    {        void IJob.Execute()        {            Console.WriteLine($"This is TestService submmit...:{Guid.NewGuid().ToString("N")}");        }    }}

2.4、调度工厂

新建一个工厂类FluentSchedulerFactory并继承Registry:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using FluentScheduler;namespace LinkTo.Test.FluentSchedulerClient{    public class FluentSchedulerFactory : Registry    {        public FluentSchedulerFactory()        {            //让Job进行单线程跑,避免没跑完时的重复执行。(全局)            NonReentrantAsDefault();            //让Job进行单线程跑,避免没跑完时的重复执行。(单个任务)            //Schedule<DataSyncJob>().NonReentrant().ToRunNow().AndEvery(5).Seconds();            //立即执行每5秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)            Schedule<DataSyncJob>().ToRunNow().AndEvery(5).Seconds();            ////立即执行一个每个月第一个星期一18:00的计划任务            //Schedule<DataSyncJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(18, 0);            ////延迟5秒执行的一次计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)            //Schedule<DataSyncJob>().ToRunOnceIn(5).Seconds();            ////指定时间执行计划任务(最常用,这里是在每天18:00执行。)            //Schedule(() => Console.WriteLine("It's 18:00 now.")).ToRunEvery(1).Days().At(18, 0);            ////在同一个计划中执行多个任务            //Schedule<DataSyncJob>().AndThen<TestJob>().ToRunNow().AndEvery(5).Seconds();        }    }}

FluentScheduler调度周期,有点类似于Quartz.NET的Cron表达式的自然语言翻译,更容易理解。另外,FluentScheduler可以在同一计划中执行多个任务,个人觉得也是特色之一。

2.5、调度

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using FluentScheduler;namespace LinkTo.Test.FluentSchedulerClient{    public partial class Main : Form    {        public Main()        {            InitializeComponent();            //按钮状态            btnStart.Enabled = true;            btnStop.Enabled = false;        }        /// <summary>        /// 开始        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnStart_Click(object sender, EventArgs e)        {            JobManager.Initialize(new FluentSchedulerFactory());            //按钮状态            btnStart.Enabled = false;            btnStop.Enabled = true;        }        /// <summary>        /// 停止        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnStop_Click(object sender, EventArgs e)        {            JobManager.Stop();            //按钮状态            btnStart.Enabled = true;            btnStop.Enabled = false;        }    }}

2.6、结果

(0)

相关推荐

  • C#作业调度Quartz.NET学习笔记

    一.简单介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于WinForm和ASP.NET应用中. ...

  • 一则公报案例学习笔记:对修改股东出资期限应否适用资本多数决规则的思考|审判研究

    一.问题的提出 2021年第3期<最高人民法院公报案例>刊登了鸿大(上海)投资管理有限公司与姚锦城公司决议纠纷上诉案,裁判要旨为:"公司股东滥用控股地位,以多数决方式通过修改出资 ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 周哥学习笔记(2021.5.8)

    心理界限存在的意义,正是为了帮助人们控制情绪进入的量,不至于太过冷漠或太过投入,让我们保持一个合适的距离与外界互动. 人没有办法只通过吸收变得更美好和丰富,它必须通过大胆的碰撞和创造.如果不能保持足够 ...

  • 【学习笔记】控制角色移动的N种方法,但都离不开重复执行

    [学习笔记]控制角色移动的N种方法,但都离不开重复执行 今天我们讲一下控制角色移动的多种方法,因为缺少操作实例,希望课下同学们结合例子好好练习. 首先,我们说一下控制角色移动的多种方法.最比较常见的就 ...

  • 胡希恕伤寒论学习笔记——42

    42.太阳病,外证未解,脉浮弱者,当以汗解,宜桂枝汤. 字面意思是说:太阳病,外证依然存在,脉是浮弱的,治疗上依然需要通过出汗的方法,这时应该用桂枝汤一类的方剂. "宜"字说明不是 ...

  • 量柱擒涨停 - 量柱战法学习笔记(2)

    四.倍量战术 1.倍量的理解 [形态特征]:与前一个交易日比较高出1倍或1倍以上,就是倍量(4倍以上为发烧柱) ; [本质特征]:体现主力强势态度,主动(倍量阳/阴)买/卖盘吸筹坚决; [位置性质]: ...

  • 胡希恕伤寒论学习笔记——43

    43.太阳病,下之微喘者,表未解故也,桂枝加厚朴杏子汤主之. 桂枝加厚朴杏子汤方 桂枝三两 芍药三两 厚朴二两(炙,去皮) 杏仁五十枚(去皮尖)甘草二两(炙) 生姜三两(切)大枣十二枚(掰) 上七味, ...

  • 学习笔记:信息技术

    学习笔记:信息技术