推荐一款好用的任务定时器:Quartz
程序员文章站
2022-04-08 19:15:18
前言 官网:https://www.quartz scheduler.net/ 一款开源的任务定时器。 日常有很多地方需要定时刷新的,比如微信开发中的微信API token,或者定时清理一下缓存数据等,应用场景还是比较常见。 接下来介绍一下这个简单好用的库。 引用 在Nuget管理中添加引用: Qu ......
前言
官网: 一款开源的任务定时器。
日常有很多地方需要定时刷新的,比如微信开发中的微信api token,或者定时清理一下缓存数据等,应用场景还是比较常见。
接下来介绍一下这个简单好用的库。
引用
在nuget管理中添加引用: quartz.dll
命名空间:
using quartz;
using quartz.impl;
写一个task
实现一个task,按时刷新api的token:
public async task refreshazulapitokenjob(ischeduler scheduler) { var tokenjobname = "refreshazultoken"; ijobdetail tokenjob = jobbuilder.create<refreshazultokenjob>() .withidentity($"{tokenjobname}job", $"{tokenjobname}group") .build(); itrigger tokentrigger = triggerbuilder.create() .withidentity($"{tokenjobname}trigger", $"{tokenjobname}group") .startnow() .withsimpleschedule(x => x .withintervalinseconds(refreshazultokeninterval) .repeatforever()) .build(); await scheduler.schedulejob(tokenjob, tokentrigger); }
主要是创建一个job,这个job就是一个要定时运行的task,创建一个trigger,在trigger里面自定义设置interval时间。
job实现
1.创建一个类,用来处理这个任务的业务逻辑,比如这个刷新token:
public class refreshazultoken { public static readonly ilogger logger; private static readonly redisutils redisutils; static refreshazultoken() { logger = loggerfactory.getlogger("refreshazultoken", envsettings.elkaddress); redisutils = chatbotapiservicemanager.redisutils; } public static async task excutor() { try { logger.information(new apirequestevent() { eventtype = logeventtype.refreshazultokenstart, message = $"start to get api token..." }); var tokenrequesturl = envsettings.azultokenurl; string tokenpostdata = "client_id=indigo&client_secret=2lw$ie6giwsnluyh&grant_type=client_credentials"; string tokenresponse = await azulapiclient.azulhttpclient(true, tokenrequesturl, tokenpostdata); var token = jsonconvert.deserializeobject<azulaccesstoken>(tokenresponse); logger.information(new apirequestevent() { eventtype = logeventtype.refreshazultokencomplete, message = $"refresh api token succeed, token:{token.accesstoken}" }); redisutils.setazulapitoken(token.accesstoken); logger.information(new apirequestevent() { eventtype = logeventtype.refreshazultokencomplete, message = $"save token into redis succeed, token:{redisutils.getazulapitoken()}" }); } catch (exception ex) { logger.error(new exceptionevent() { eventtype = logeventtype.refreshazultokenerror, message = $"refresh azul api token failed.", exception = ex, }); } } }
2.创建另外一个类,这个类继承quartz中的ijob,调用上面业务逻辑的方法:
public class refreshazultokenjob : ijob { public async task execute(ijobexecutioncontext context) { await refreshazultoken.excutor(); } }
这样一个简单的task job 就创建好了,refreshazultokenjob 就是第一步里面创建job的参数。
job启动
在应用程序的starup.cs里,启动这个scheduler task:
taskscheduler().scheduler().getawaiter().getresult();
上一篇: 减压阀工作原理(图)
下一篇: 老公买了一堆鸭脖子鸭舌头之类的回来