最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度的示例代碼

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

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

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

實(shí)現(xiàn)任務(wù)類

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

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

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

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

實(shí)現(xiàn)一個LogiDownloadJob任務(wù)類

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

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

啟動調(diào)度

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

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

    //2、創(chuàng)建一個任務(wù)
    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);

    // 第二個任務(wù)
    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)建第二個任務(wù):

 // 創(chuàng)建并調(diào)度第二個作業(yè)  
 // 第二個任務(wù)
 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ā)器在調(diào)度器中具有唯一的標(biāo)識,從而避免沖突。
  • 組織性:通過組名,可以將相關(guān)的作業(yè)或觸發(fā)器組織在一起,便于管理。
  • 靈活性:通過使用不同的組,可以輕松地啟用、禁用或刪除一組相關(guān)的作業(yè)或觸發(fā)器。
  • 查詢和更新:有了明確的身份標(biāo)識,可以更容易地查詢作業(yè)或觸發(fā)器的狀態(tài),或者對其進(jìn)行更新。

取消任務(wù)調(diào)度

// 關(guān)閉
scheduler1.Shutdown().Wait();
 //方法外部訪問調(diào)度器實(shí)例
IScheduler scheduler1;
 public async void ExQuartz()
 {
     DisplayListboxMsg("檢測任務(wù)啟動!");
     //1、創(chuàng)建一個調(diào)度
     var factory = new StdSchedulerFactory();
     var scheduler = await factory.GetScheduler();
     await scheduler.Start();
     //2、創(chuàng)建一個任務(wù)
     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>
        /// 方法外部訪問調(diào)度器實(shí)例
        /// </summary>
        IScheduler logiScheduler;

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

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

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

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

    }
}

調(diào)用示例

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

以上就是C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C# Quartz任務(wù)調(diào)度的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#?Directory類的操作代碼

    C#?Directory類的操作代碼

    這篇文章主要介紹了C#?Directory類的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 基于Avalonia實(shí)現(xiàn)自定義彈窗的示例詳解

    基于Avalonia實(shí)現(xiàn)自定義彈窗的示例詳解

    對于使用avalonia的時候某些功能需要到一些提示,比如異常或者成功都需要對用戶進(jìn)行提示,所以需要單獨(dú)實(shí)現(xiàn)彈窗功能,并且可以自定義內(nèi)部組件,這一期將手動實(shí)現(xiàn)一個簡單的小彈窗,并且很容易自定義,希望大家喜歡
    2023-02-02
  • C#中遍歷Hashtable的4種方法

    C#中遍歷Hashtable的4種方法

    這篇文章主要介紹了C#中遍歷Hashtable的4種方法,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-06-06
  • c#基礎(chǔ)知識---委托,匿名函數(shù),lambda

    c#基礎(chǔ)知識---委托,匿名函數(shù),lambda

    這篇文章主要介紹了c# 委托,匿名函數(shù),lambda的相關(guān)知識,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • c#通過DES加密算法加密大文件的方法

    c#通過DES加密算法加密大文件的方法

    這篇文章主要介紹了c#通過DES加密算法加密大文件的方法,涉及C#文件操作與DES加密的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#結(jié)合Spire.Doc?for?.NET實(shí)現(xiàn)將XML轉(zhuǎn)為PDF

    C#結(jié)合Spire.Doc?for?.NET實(shí)現(xiàn)將XML轉(zhuǎn)為PDF

    可擴(kuò)展標(biāo)記語言(XML)文件是一種標(biāo)準(zhǔn)的文本文件,它使用自定義標(biāo)簽來描述文檔的結(jié)構(gòu)及其他特性,本文將演示如何使用?Spire.Doc?for?.NET?在?C#?和?VB.NET?中實(shí)現(xiàn)?XML?到?PDF?的轉(zhuǎn)換,有需要的可以了解下
    2026-03-03
  • 在C#中根據(jù)HardwareID獲取驅(qū)動程序信息的實(shí)現(xiàn)代碼

    在C#中根據(jù)HardwareID獲取驅(qū)動程序信息的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#中根據(jù)HardwareID獲取驅(qū)動程序信息的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-12-12
  • C#通過html調(diào)用WinForm的方法

    C#通過html調(diào)用WinForm的方法

    這篇文章主要介紹了C#通過html調(diào)用WinForm的方法,涉及html頁面中使用JavaScript訪問C#的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • C#代碼實(shí)現(xiàn)將PDF轉(zhuǎn)換為PDF線性化格式

    C#代碼實(shí)現(xiàn)將PDF轉(zhuǎn)換為PDF線性化格式

    PDF 線性化是一種對 PDF 文件進(jìn)行優(yōu)化的方式,本文將為大家詳細(xì)介紹如何使用C#代碼將普通 PDF 轉(zhuǎn)換為線性化 PDF,感興趣的小伙伴可以參考一下
    2026-04-04
  • C#之Socket(套接字)通信

    C#之Socket(套接字)通信

    這篇文章介紹了C#之Socket(套接字)通信,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評論

会泽县| 青岛市| 海南省| 六盘水市| 金塔县| 方山县| 平山县| 盐津县| 宾川县| 彝良县| 朔州市| 上饶市| 亚东县| 青阳县| 天气| 红河县| 宜黄县| 防城港市| 红桥区| 全椒县| 斗六市| 新安县| 教育| 江阴市| 龙江县| 开化县| 胶州市| 铁力市| 黑龙江省| 鸡西市| 忻州市| 秦皇岛市| 德化县| 太原市| 会泽县| 高唐县| 潮安县| 小金县| 明水县| 武功县| 浏阳市|