ASP.NET MVC 使用 FluentScheduler 定時器計劃任務

来源:http://www.cnblogs.com/mafly/archive/2016/11/01/FluentScheduler.html
-Advertisement-
Play Games

MacBook Pro 只有四個 USB Type C 介面是否錯了? 一項新技術的誕生總會對已存在的事物造成衝擊或影響,如果大家都害怕衝擊與影響,那這個世界永遠像現在不變就行了,大家都好好的,待在自己的舒適區,社會絲毫沒有創新與進步而言。 其實, USB Type C 介面協議在三年前幾個科技巨頭 ...


MacBook Pro 只有四個 USB Type-C 介面是否錯了?

一項新技術的誕生總會對已存在的事物造成衝擊或影響,如果大家都害怕衝擊與影響,那這個世界永遠像現在不變就行了,大家都好好的,待在自己的舒適區,社會絲毫沒有創新與進步而言。

其實, USB Type-C 介面協議在三年前幾個科技巨頭公司就參與制定了協議,並答應要在自家的產品上推廣它,但誰都怕一下子在自家產品上升級 USB Type-C 介面被消費者罵出翔進而影響產品銷量,這時候,蘋果公司跳出來了幹了這件事,在去年的 MacBook 升級中就已經把 USB Type-A 取消了,好像大家也並沒用過多抵觸,可能是使用的人少的原因,但是就在剛剛發佈的 MacBook Pro 中取消了全部介面,僅僅只有四個 USB Type-C 了,然後大家都莫名高潮了,說「什麼蘋果智障!不考慮消費者!出門要帶一堆轉接頭!!蘋果就是為了賺配件的錢!!新款手機連接不是新款電腦!!我要去買老款的 MacBook Pro !!!庫克是個同性戀!!!蘋果吃棗藥丸!!!」。

好吧,你們贏了。

如果你作為消費者來仔細想想,當然你本來就是消費者,可以正反隨便插、想怎麼插怎麼插,晚上也不用開燈就能插,速度而且快的驚人,這個口用處多的數不清,想怎麼用怎麼用,你現在會怎麼想?反正現在好多 Android 手機已經是 USB Type-C 了。

FluentScheduler 是什麼?

Automated job scheduler with fluent interface.

這是作者在 Github 上的介紹,就是一個定時任務管理器。在 .Net 下類似的有微軟的 Timer 、 Quartz.NET 、 FluentScheduler 以及Windows服務等,關於 Quartz.NET 的使用幾乎和 Java 下的 Quartz 沒什麼區別,我之前寫過一篇 Spring 使用 Quartz 任務調度定時器 是關於 Quartz 的。

定時任務或者說作業調度,可能也只有在你指定一個時間做統計、發郵件或者一些你想完成的業務邏輯時有用,這也是它出現的目的。

如何使用 FluentScheduler ?

我是推薦你去作者的 Github 去看看源碼或例子,地址: https://github.com/fluentscheduler/FluentScheduler
當然,這裡我用作者的例子做了演示和翻譯,保證誰都能看的懂。

一、安裝FluentScheduler程式包
打開程式包管理控制台,輸入Install-Package FluentScheduler即可。步驟:狀態欄選擇 工具 - 庫程式包管理器 - 程式包管理控制台,如下圖:
FluentScheduler package.png

輸入Install-Package FluentScheduler
Install-Package.png

二、寫代碼
我這裡只簡單貼一下作者的示例代碼,更推薦你去 Github 看,但我隨手翻譯了一下,或許更容易閱讀一些。

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.asax中加入一句

JobManager.Initialize(new Demo());

上面是簡單的使用,其實已經足夠了,當然還有更多變態的需求,作者也在文檔里寫了,比如這個:你想執行一個計劃任務,每周一 14:00 運行。但現在是星期一上午 10:00 ,那你的程式應該在今天運行還是在下周星期一?這裡用到了 ToRunEvery
還有併發任務的處理,有興趣可以去看看。

總結一下

FluentScheduler 是 .Net 下,可以讓你輕鬆實現定時任務的工具,不需要再去寫Windows服務了,更重要的是時間設置起來靈活很多,定時任務難點不就是在這麼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MongoDB的訪問控制能夠有效保證資料庫的安全,訪問控制是指綁定Application監聽的IP地址,設置監聽埠,使用賬戶和密碼登錄 一,訪問控制的參數 1,綁定IP地址 mongod 參數:--bind_ip <ip address> 預設值是所有的IP地址都能訪問,該參數指定MongoDB對 ...
  • [linux]CentOS無法使用epel源 問題的產生與解決 作者作為Android應用開發者,對linux的接觸一直是ubuntu為主,但是有一個用於科學上網的vps,由於記憶體只有64M,所以使用的操作系統為CentOS6,最近在上面安裝用於Json處理的jq的時候,發現需要用到epel源,於是 ...
  • ubuntu16.04伺服器配置ssh免密登錄,ssh簡寫技巧 ...
  • 這個雖然是基礎知識,但是有些東西就是這樣,久了沒用,就會忘記,而且之前有一個壞習慣就是不喜歡做筆記,以後學習了行東西一定要記錄在博客,這樣以後自己也能時不時的查看一下。 言歸正傳,在電腦的世界中,數據的表達形式就只有0或者1,而壓縮演算法就是根據這些01找出一些演算法,可以用更少的01來代表他們。 現 ...
  • 學習了這麼久,終於寫下了第一篇博客,總結下Ring3層註入Dll的方法。我把註入的方法分成六類,分別是:1.創建新線程、2.設置線程上下背景文,修改寄存器、3.插入Apc隊列、4.修改註冊表、5.掛鉤視窗消息、6.遠程手動實現LoadLibrary。 ...
  • 運行編譯後的程式報錯 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory 首先說明一下,這個題目有點長,但是卻很好地反應了遇到的問題點。 在《 ...
  • Visual Studio 內置 Strong Name Tool, 我們直接運行“VS開發人員命令提示”就可以生成秘鑰文件。 秘鑰文件包含公鑰和私鑰。 來看這個例子: 在文件夾下 D:\friend assembly\friend signed 新建一個秘鑰文件。 1. 運行“VS開發人員命令提示 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; region 概述 //在類聲明中使用sealed可防止其它類繼承此類;在方法聲明中使用sealed修飾符可防止擴充類重寫此方法 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...