范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

NetCore使用Coravel实现任务调度

  前言
  前段时间需要在一个新项目里添加两个后台任务,去定时请求两个供应商的API来同步数据;由于项目本身只是一个很小的服务,不太希望引入太重的框架,同时也没持久化要求;于是我开始寻找在Quartz.Net、Hangfire之外,是否还有更为轻量级的框架满足我的要求,最终我选择了Coravel. 简介
  Coravel是一个专为.NET Core设计的.NET Standard库,除了任务调度,还提供了像队列、缓存、邮件等其它高级功能。特点就是对开发者十分友好,接入十分简单、优雅、流畅,接近于零配置。
  作为一个生于2018年的年轻项目,后发优势明显,一开始就是基于.Net Standard 2.0实现,没有历史负担,同时又可以利用很多.Net Core新特性。 用法
  首先安装Coravel包 dotnet add package coravel
  下面演示在.Net 6 Minimal API项目中接入Coravel并设置两个定时任务,是不是非常简单:) using Coravel; var builder = WebApplication.CreateBuilder(args); //只使用Coravel的任务调度功能builder.Services.AddScheduler(); //注册你自己的调度任务builder.Services.AddTransient();builder.Services.AddTransient(); var app = builder.Build(); //配置任务app.Services.UseScheduler(scheduler =>    {        scheduler.Schedule().EveryFiveMinutes(); //每5分钟执行一次Job1        scheduler.Schedule().Hourly().Monday(); // 每周一每小时执行一次    });
  Coravel预先定义好了很多常用的间隔频率,非常的全面,像上面用到的  EveryFiveMinutes()   和 Hourly()  ,是不是非常的简单优雅;当然Coravel也支持Cron表达式。
  Invocable   是Coravel中的核心概念,代表一个独立的任务,上面的YourCoravelJob1和YourCoravelJob2就是 Invocable  ,Coravel直接调度这些Invocable  。
  要创建你自己的Invocable  ,只需实现 IInvocable  接口,在 Invoke  方法中编码你的任务。public class YourCoravelJob1 : IInvocable    {        private readonly ILogger _logger;         public YourCoravelJob1(ILogger logger)        {            _logger = logger;        }         public async Task Invoke()        {             _logger.LogInformation("start..");        }    }}原理
  Coravel使用是的.Net Core 2.0引入的IHostedService来实现后台定时任务。(因此只有.Net Core 2.0以上的项目才能使用Coravel) public interface IHostedService{    Task StartAsync(CancellationToken cancellationToken);    Task StopAsync(CancellationToken cancellationToken);}
  SchedulerHost即实现了IHostedService接口,在 其 StartAsync  方法中,当程序完全启动时,注册了一个的Timer  public Task StartAsync(CancellationToken cancellationToken){    this._lifetime.ApplicationStarted.Register(InitializeAfterAppStarted);    return Task.CompletedTask;} private void InitializeAfterAppStarted(){    this._timer = new Timer(this.RunSchedulerPerSecondAsync, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));} private async void RunSchedulerPerSecondAsync(object state){ if (this._schedulerEnabled) {   await this._scheduler.RunSchedulerAsync();  }}
  每秒调用  RunSchedulerAsync   激活到点的Invocable  ,同时会根据情况将任务分组,在单独的线程分开执行。从这里可以看到Coravel是支持秒级任务的。
  在  StopAsync   方法中,会先等待正在执行的任务完成才会关闭,这个功能还是比较重要。public async Task StopAsync(CancellationToken cancellationToken){    this._schedulerEnabled = false; // Prevents changing the timer from firing scheduled tasks.    this._timer?.Change(Timeout.Infinite, 0);     this._scheduler.CancelAllCancellableTasks();     // If a previous scheduler execution is still running (due to some long-running scheduled task[s])    // we don"t want to shutdown while they are still running.    if (this._scheduler.IsRunning)    {        this._logger.LogWarning(ScheduledTasksRunningMessage);    }     while (this._scheduler.IsRunning)    {        await Task.Delay(50);    }} 总结
  本文介绍一个对开发者友好的、轻量级、零配置的.Net Standard库Coravel,并演示了如何使用Coravel在.Net 6 Minimal API中创建定时任务,最后浅析了的实现原理。作为一个年轻的框架,Coravel站在了巨人的肩膀上,相比Quartz.Net、Hangfire,也拥有很多亮点特性,很值得尝试。
  任何问题或者建议,欢迎评论区留言讨论~ 参考链接https://github.com/jamesmh/coravel https://docs.coravel.net https://docs.microsoft.com/en-us/dotnet/core/extensions/generic-host

为什么有些糖尿病人不吃面食,血糖显著改善?麸质不耐受是关键很多糖友跟我说,原来在北方,天天吃面食,血糖控制很差,后来去南方生活,改吃大米饭,血糖显著改善了,为什么呢?我给他们分析,主要可能是因为他们存在麸质(面筋蛋白)不耐受,引起肠漏,增大脑的保护神来了,2味药当茶喝,脑梗患者不要错过大家好,我是中医张玉琴,今天给大家推荐两味药材,号称大脑的保护神。这两味药材研成粉末,用开水冲服,可以活血化瘀通经活络溶栓,不卖关子了。第一味药物是血竭,此药性平,能够祛瘀止痛,能用舌尖接吻更甜?这6个假知识,骗了你多少年?造谣一张嘴,辟谣跑断腿,这道理在人体和健康领域同样适用。今天,九叔收集了几个被传了几十年的谣言,有的甚至已经被当成常识,快看看你有没有被骗吧有贫血问题,做菜必须用铁锅?用不粘锅或不生活中有不畅之扰吗?三招帮你肠轻松生活节奏快,工作压力大,你的生活里是否有些难言之隐?便秘是不少人经常遭遇,却又难以启齿的困扰。上海中医药大学附属龙华医院肛肠科副主任医师姚一博说,每个人的便秘症状不尽相同,有些患者女排世锦赛名单出炉,冠军之师四大将入围,三人核心一人或成黑马北京时间9月17日,中国排协公布了参加2022年女排世锦赛的国家队大名单。世锦赛名单共有16名球员随队出征,其中来自国内排坛冠军之师天津女排的四名优秀球员李盈莹袁心玥王媛媛王艺竹悉郭艾伦续约辽宁男篮后CBA联盟夺冠几率排行榜第一位辽宁队,夺冠概率为55,辽宁有没有郭艾伦是两个档次,现在艾伦归位,辽宁原班人马卫冕冠军基本十拿九稳第二位上海队,夺冠概率为15,有老帅李春江坐镇,上海队最大引援就是请回了比斯斯诺克赛季大幕拉开,群雄逐鹿再现繁忙的斯诺克新赛季即将拉开序幕。一个特别危险的罗尼奥沙利文会取得怎样的成绩?未知地马克塞尔比能否从2022年的困境中恢复过来?还有贾德特鲁姆普,他的目标自然是夺回风头。谁又能打破失网络游戏东北人,和苏州小时候听说上有天堂,下有苏杭的时候,就有些疑惑,为什么苏杭苏杭,明明苏在前,杭在后,但好像杭州就是比苏州更知名。长大后,第一次去苏州的经历,颇有些传奇,起因不是园林,不是春茶,也不定制色彩搭配的紧凑型背光游戏无线多模机械键盘雷柏V7008A体验云瑞将军图文版权声明图文均属原创,版权所有,未经许可或授权,禁止转载或引用。人生,就是在不断感受,不断体验,不断修行!感谢在这一路上给予我帮助的老师和朋友们。一直对紧凑型的机械键盘iPhone14令游戏玩家失望?这款天玑9000新游戏旗舰或是更香选择前不久,苹果正式发布了iPhone14系列,其中最受关注的还是Pro版,不仅有药丸屏和灵动岛,4800万像素的主摄,还独占了全新的A16芯片,要知道上一次苹果在同数字系列用上不同处安芯易4千万颗!传苹果明年3nm处理器将下单,仅Pro系列搭载半导体行业早报,安芯易为你精彩呈现。电子元器件采购,就选安芯易!1传苹果明年3nm处理器下单4千万颗身处中国台湾省半导体供应链的数码博主手机晶片达人日前透露,2023年苹果公司3n