做爲一個優秀的開源調度框架,Quartz 具備如下特色:spring
另外,做爲 Spring 默認的調度框架,Quartz 很容易與 Spring 集成實現靈活可配置的調度功能。框架
quartz調度核心元素:異步
我這裏簡單記錄使用過程及代碼:async
1:首先引用Quartz組件分佈式
2:using Quartz;using Quartz.Impl;函數
注:在本地新建一個控制檯項目,將如下代碼copy過去便可用,只須要重寫Execute方法便可。Quartz3.0及以上的版本是採用的異步,3.0如下的版本沒有采用異步,使用方法是同樣的ui
主函數入口文件:spa
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net; using Quartz.Impl; namespace Quartz { class Program { private static readonly ILog _log = LogManager.GetLogger(typeof(Program)); private static readonly string tiggerName = "TestJobTrigger"; private static readonly string gropName = "TestJobTriggerGrop"; private static readonly string jobName = "TestJob"; //從工廠中獲取一個調度器實例化 private static IScheduler scheduler = null; static void Main(string[] args) { Console.WriteLine("開始任務...."); _log.Debug("開始任務...."); Start(); } private static async void Start() { //從工廠中獲取一個調度器實例化 scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //建立一個做業 IJobDetail job1 = JobBuilder.Create<HelloJob>() .WithIdentity(jobName, gropName) .UsingJobData("key", "value")// 傳遞參數 在Execute方法中獲取(以什麼類型值傳入,取值就用相應的類型方法取值) .Build(); // 建立觸發器 ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity(tiggerName, gropName) .StartNow() //如今開始 .WithSimpleSchedule(x => x //觸發時間,10秒一次。 .WithIntervalInSeconds(10) .RepeatForever()) //不間斷重複執行 .Build(); await scheduler.ScheduleJob(job1, trigger1); //把做業,觸發器加入調度器。 Console.ReadKey(); // 清除任務和觸發器 // ClearJobTrigger(); } /// <summary> /// 清除任務和觸發器 /// </summary> private static void ClearJobTrigger() { 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();// 關閉 } } } }
實現IJob 接口的任務文件.net
using System; using System.Threading.Tasks; using log4net; namespace Quartz { public class HelloJob : IJob { private readonly ILog _log = LogManager.GetLogger(typeof(HelloJob)); public async Task Execute(IJobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; string k = dataMap.GetString("key");//獲取參數(可根據傳遞的類型使用GetInt、GetFloat、GetString.....) _log.Debug("run TestJob debug"); _log.Error("run TestJob error"); _log.Info("run TestJob info"); // 在這裏處理你的任務 string dt = DateTime.Now.ToUniversalTime().ToString(); Console.WriteLine(dt); } } }
源碼下載地址:https://download.csdn.net/upload/11091082debug