推荐一款好用的任务定时器:Quartz
前言
官网:https://www.quartz-scheduler.net/ 一款开源的任务定时器。
日常有很多地方需要定时刷新的,比如微信开发中的微信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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库