亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#實現(xiàn)Quartz任務調度的示例代碼

 更新時間:2024年04月12日 08:47:18   作者:叫我少年  
使用 Quartz.NET,你可以很容易地安排任務在應用程序啟動時運行,或者每天、每周、每月的特定時間運行,甚至可以基于更復雜的調度規(guī)則,本文給大家介紹了C#實現(xiàn)Quartz任務調度,需要的朋友可以參考下

使用 Quartz.NET,你可以很容易地安排任務在應用程序啟動時運行,或者每天、每周、每月的特定時間運行,甚至可以基于更復雜的調度規(guī)則。

官網(wǎng):http://www.quartz-scheduler.net/

實現(xiàn)任務類

創(chuàng)建一個實現(xiàn)了 IJob 接口的類(MailJobTest),該接口包含一個 Execute 方法,該方法將在作業(yè)運行時調用。例如:

using Quartz;
using System;
using System.Threading.Tasks;
using UploadLogiData.Util;

namespace UploadLogiData
{
    /// <summary>
    /// 郵件任務測試(每天三點固定時間檢測Logi數(shù)據(jù)并發(fā)送內部郵件)
    /// </summary>
    //對于耗時任務,需要上一次執(zhí)行完成后,才執(zhí)行下次任務,覆蓋之前設置的執(zhí)行周期
    [DisallowConcurrentExecution]
    public class MailJobTest : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                DisplayListboxMsg("郵箱開始調度");

            } catch (Exception ex)
            {  
                UpUtil.LogWrite("ExceptionLog",$"定時器異常_{ex.StackTrace}");
            }
        }
    }
}

實現(xiàn)一個LogiDownloadJob任務類

using MechTE_480.DateTimeCategory;
using Quartz;
using System;
using System.Threading.Tasks;
using UploadLogiData.Util;

namespace UploadLogiData.Quartzs
{
    /// <summary>
    /// 監(jiān)聽啟動時間,執(zhí)行任務下載logi數(shù)據(jù)
    /// </summary>
    //對于耗時任務,需要上一次執(zhí)行完成后,才執(zhí)行下次任務,覆蓋之前設置的執(zhí)行周期
    [DisallowConcurrentExecution]
    public class LogiDownloadJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            DisplayListboxMsg("啟動時間開始調度");
        }
    }
}

啟動調度

實例化并啟動調度程序,并調度要執(zhí)行的作業(yè):

IScheduler scheduler1;
/// <summary>
/// 執(zhí)行任務調度
/// </summary>
/// <returns></returns>
public async Task ExLogiQuartz()
{
    DisplayListboxMsg("檢測任務啟動!");
    //1、創(chuàng)建一個調度
    var factory = new StdSchedulerFactory();
    var scheduler = await factory.GetScheduler();
    await scheduler.Start();

    //2、創(chuàng)建一個任務
    var job = JobBuilder.Create<LogiDownloadJob>()
        .WithIdentity("LogiJob","LogiGroup")
        .Build();
    //3、創(chuàng)建一個觸發(fā)器
    var trigger = TriggerBuilder.Create()
        .WithIdentity("LogiTrigger","LogiTriggerGroup")
        .WithCronSchedule("0/5 * * * * ?")     //5秒執(zhí)行一次
        .Build();
    await scheduler.ScheduleJob(job,trigger);

    // 第二個任務
    var job2 = JobBuilder.Create<MailJobTest>()
       .WithIdentity("MailJob","MailGroup")
       .Build();
    //3、創(chuàng)建一個觸發(fā)器
    var trigger2 = TriggerBuilder.Create()
        .WithIdentity("MailTrigger","MailTriggerGroup")
        .WithCronSchedule("0/5 * * * * ?")     //5秒執(zhí)行一次
        .Build();
    await scheduler.ScheduleJob(job2,trigger2);

    scheduler1 = scheduler; // 對象賦值
}

為作業(yè)指定身份:

var job = JobBuilder.Create<SimpleJob>()
        .WithIdentity("LogiJob","LogiGroup") // // 作業(yè)名稱為 "LogiJob",組名為 "LogiGroup"  
        .Build();

為觸發(fā)器指定身份:

ITrigger trigger = TriggerBuilder.Create()  
    .WithIdentity("myTrigger", "myTriggerGroup") // 觸發(fā)器名稱為 "myTrigger",組名為 "myTriggerGroup"  
    .StartNow()  
    .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())  
    .Build();

創(chuàng)建第二個任務:

 // 創(chuàng)建并調度第二個作業(yè)  
 // 第二個任務
 var job2 = JobBuilder.Create<MailJobTest>()
    .WithIdentity("MailJob","MailGroup")
    .Build();
 //3、創(chuàng)建一個觸發(fā)器
 var trigger2 = TriggerBuilder.Create()
     .WithIdentity("MailTrigger","MailTriggerGroup")
     .WithCronSchedule("0/5 * * * * ?")     //5秒執(zhí)行一次
     .Build();
 await scheduler.ScheduleJob(job2,trigger2);
  
    // 可以繼續(xù)添加更多的作業(yè)和觸發(fā)器...  

重要性

  • 唯一性:確保每個作業(yè)和觸發(fā)器在調度器中具有唯一的標識,從而避免沖突。
  • 組織性:通過組名,可以將相關的作業(yè)或觸發(fā)器組織在一起,便于管理。
  • 靈活性:通過使用不同的組,可以輕松地啟用、禁用或刪除一組相關的作業(yè)或觸發(fā)器。
  • 查詢和更新:有了明確的身份標識,可以更容易地查詢作業(yè)或觸發(fā)器的狀態(tài),或者對其進行更新。

取消任務調度

// 關閉
scheduler1.Shutdown().Wait();
 //方法外部訪問調度器實例
IScheduler scheduler1;
 public async void ExQuartz()
 {
     DisplayListboxMsg("檢測任務啟動!");
     //1、創(chuàng)建一個調度
     var factory = new StdSchedulerFactory();
     var scheduler = await factory.GetScheduler();
     await scheduler.Start();
     //2、創(chuàng)建一個任務
     var job = JobBuilder.Create<SimpleJob>()
         .WithIdentity("job1","group1")
         .Build();
     //3、創(chuàng)建一個觸發(fā)器
     var trigger = TriggerBuilder.Create()
         .WithIdentity("trigger1","group1")
         .WithCronSchedule("0/2 * * * * ?")     //5秒執(zhí)行一次
         .Build();
     await scheduler.ScheduleJob(job,trigger);

     scheduler1 = scheduler; // 對象賦值
  
 }

把ExQuartz封裝到類里面

ExLogiQuartz方法示例,同時考慮了scheduler的存儲和訪問:

QuartzScheduler類中

using Quartz;
using Quartz.Impl;
using System.Threading.Tasks;

namespace UploadLogiData.Quartzs
{

    /// <summary>
    /// 封裝了ExLogiQuartz方法和對scheduler的訪問
    /// </summary>
    public class QuartzScheduler
    {
        /// <summary>
        /// 方法外部訪問調度器實例
        /// </summary>
        IScheduler logiScheduler;

        //先靜態(tài)定義一下主窗體
        public static Form1 form;

        public async Task ExLogiQuartz()
        {
            form.DisplayListboxMsg("檢測任務啟動!");
            // 創(chuàng)建一個調度器實例  
            var factory = new StdSchedulerFactory();
            logiScheduler = await factory.GetScheduler();
            await logiScheduler.Start();

            // 創(chuàng)建一個任務:LogiDownloadJob,每5秒執(zhí)行一次  
            var job = JobBuilder.Create<LogiDownloadJob>()
                .WithIdentity("LogiJob","LogiGroup")
                .Build();
            var trigger = TriggerBuilder.Create()
                .WithIdentity("LogiTrigger","LogiTriggerGroup")
                .WithCronSchedule("0/5 * * * * ?") // 5秒執(zhí)行一次  
                .Build();
            await logiScheduler.ScheduleJob(job,trigger);

            // 創(chuàng)建第二個任務:MailJobTest,每天下午3點10分執(zhí)行一次  
            var job2 = JobBuilder.Create<MailJobTest>()
                .WithIdentity("MailJob","MailGroup")
                .Build();
            var trigger2 = TriggerBuilder.Create()
                .WithIdentity("MailTrigger","MailTriggerGroup")
                .WithCronSchedule("0 10 15 * * ?") // 每天下午3點10分執(zhí)行一次  
                .Build();
            await logiScheduler.ScheduleJob(job2,trigger2);

            // 如果需要在其他地方訪問scheduler,可以通過類屬性或方法獲取  
        }
        public IScheduler Scheduler => logiScheduler;

    }
}

調用示例

// 使用示例  
public class Program  
{  
    public static async Task Main(string[] args)  
    {  
        var quartzScheduler = new QuartzScheduler();  
        await quartzScheduler.ExLogiQuartz();  
        
        // 如果需要在其他地方訪問scheduler,可以通過以下方式獲取  
        var scheduler = quartzScheduler.Scheduler;  
      
        // 如調用關閉
        quartzScheduler.Scheduler.Shutdown().Wait();
        // 其他邏輯...  
    }  
}

以上就是C#實現(xiàn)Quartz任務調度的示例代碼的詳細內容,更多關于C# Quartz任務調度的資料請關注腳本之家其它相關文章!

相關文章

  • C# XmlDocument操作XML案例詳解

    C# XmlDocument操作XML案例詳解

    這篇文章主要介紹了C# XmlDocument操作XML案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C#簡單實現(xiàn)文件上傳功能

    C#簡單實現(xiàn)文件上傳功能

    這篇文章主要介紹了C#簡單實現(xiàn)文件上傳功能,利用MVC+EF+LigerUI 實現(xiàn)的upload上傳功能,感興趣的小伙伴們可以參考一下
    2016-03-03
  • C#實現(xiàn)設置Excel表格中文本對齊方式和格式

    C#實現(xiàn)設置Excel表格中文本對齊方式和格式

    這篇文章主要為大家詳細介紹了如何在.NET 程序中通過C# 設置Excel單元格中文本的對齊方式,方向以及換行,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • Winform控件優(yōu)化之圓角按鈕2

    Winform控件優(yōu)化之圓角按鈕2

    這篇文章主要介紹了Winform控件優(yōu)化之圓角按鈕2,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08
  • C#?使用PrintDocument類打印標簽的方法

    C#?使用PrintDocument類打印標簽的方法

    本文介紹打印機初步配置,以及實現(xiàn)方法,標簽主要展示資產基本信息以及二維碼,對C#?使用PrintDocument類打印標簽的詳細過程感興趣的朋友一起看看吧
    2022-04-04
  • C#實現(xiàn)Winform監(jiān)控文件夾變化以及監(jiān)控文件操作教程

    C#實現(xiàn)Winform監(jiān)控文件夾變化以及監(jiān)控文件操作教程

    在開發(fā)應用程序時,我們可能會因為場景的需要,要對文件系統(tǒng)中的文件或文件夾進行實時監(jiān)測,以便在文件內容改變、文件被創(chuàng)建、刪除或重命名時能夠及時做出反應,今天,我將為大家介紹完整的操作流程,讓你輕松實現(xiàn)監(jiān)控文件/文件夾變化的功能,需要的朋友可以參考下
    2024-12-12
  • C# FileStream復制大文件功能

    C# FileStream復制大文件功能

    這篇文章主要為大家詳細介紹了C# FileStream復制大文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C#學習筆記整理_淺談Math類的方法

    C#學習筆記整理_淺談Math類的方法

    下面小編就為大家?guī)硪黄狢#學習筆記整理_淺談Math類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • DevExpress之ChartControl實現(xiàn)柱狀圖演示實例

    DevExpress之ChartControl實現(xiàn)柱狀圖演示實例

    這篇文章主要介紹了DevExpress中ChartControl實現(xiàn)柱狀圖演示方法,實例展示了相關繪圖函數(shù)的具體用法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • C#實現(xiàn)的WINDOWS登錄功能示例

    C#實現(xiàn)的WINDOWS登錄功能示例

    這篇文章主要介紹了C#實現(xiàn)的WINDOWS登錄功能,結合實例形式分析了簡單的Windows圖形化登陸功能實現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08

最新評論