C# 實現定時/循環任務


用C#實現定時/循環任務,需要使用到Quartz,在項目的NuGet包管理中可以找到並添加。一般還會伴隨安裝一個Log4Net,主要用它來記錄在任務執行過程中遇到的問題。這邊主要是講實現定時/循環任務,就不再贅述。

 

要實現定時/循環任務,就需要用到C#的作業和觸發器

作業:

1.作業創建:

JobBuilder.Create<TestJob>()  這里的<TestJob>就是你實現具體任務的類
1             IJobDetail job1 = JobBuilder.Create<TestJob>()
2              .WithIdentity(jobName, gropName) //為該job的jobName和gropName賦值,相當於給予一個身份(非必須)
3              .UsingJobData("key", "value")//為作業的具體任務傳遞參數,鍵值對(非必須)
4              .Build();//創建作業(必須)

2.作業的具體任務

這時候要創建一個類,繼承IJob,並實現接口方法,此方法是觸發器觸發時調用的方法,所以在這里寫你的任務。

using log4net;
using Quartz;
using System;using System.Threading.Tasks;

namespace BackgroundTask.job
{
    public class TestJob : IJob
    {
        private readonly ILog _log = LogManager.GetLogger(typeof(TestJob));//利用Log來記錄在任務執行過程中遇到的問題
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap = context.JobDetail.JobDataMap;
            string k = dataMap.GetString("key");//在這里獲取到參數,有GetInt,GetXXX等等,滿足參數的類型需求// 以下開始寫你的任務代碼,
            Console.WriteLine(“123321”);
        }
    }
}

 

觸發器:

1.觸發器的聲明

現在的版本,觸發器創建和設置需要采用異步方法。

            IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();     //從工廠中獲取一個調度器實例化

2.觸發器的設置

循環觸發器設置:

            // 創建觸發器
            ITrigger trigger1 = TriggerBuilder.Create()
                                        .WithIdentity(tiggerName, gropName) //為觸發器的tiggerName和gropName賦值,相當與給予一個身份
                                        .StartNow()                        //現在開始
                                        .WithSimpleSchedule(x => x         
                                            .WithIntervalInSeconds(10)     //觸發時間,10秒一次。
                                            .RepeatForever())              //不間斷重復執行
                                        .Build();                          //最終創建


            await scheduler.ScheduleJob(job1, trigger1);      //把作業,觸發器加入調度器。
            await scheduler.Start();

定時觸發器設置:

            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                 //.StartAt(startTime).EndAt(endTime)  //開始時間,結束時間
                                   .WithCronSchedule(cronExpression) //設置定時觸發規則 cronExpression字符串就包含了規則
                                   .Build();  //最終創建

            await scheduler.ScheduleJob(job1, trigger);

            await scheduler.Start();

 

任務和觸發器的關閉

還記得在創建作業和觸發器時候給的那個身份嗎?在關閉的時候可以指定關閉對象

            TriggerKey triggerKey = new TriggerKey(tiggerName, gropName);
            JobKey jobKey = new JobKey(jobName, gropName);
            if (scheduler != null)
            {
                scheduler.PauseTrigger(triggerKey);
                scheduler.UnscheduleJob(triggerKey);
                scheduler.DeleteJob(jobKey);
                scheduler.Shutdown();// 關閉
            }

 

自此,我們對實現定時/循環任務就有了個清晰的思路

1 新建一個控制台項目。

2 建一個類,在此類中創建作業和觸發器。

3 再建一個類,此類繼承IJob接口,實現Excute方法。此類作為作業的具體實行任務。

4 執行該項目。

 

 

 

附帶知識點:

CronExpression 規則

 

 

 

 


免責聲明!

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



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