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、結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM