当前位置:首页 > 科技  > 软件

如何使用Asp.net Core实现定时任务,轻松解决任务调度问题!

来源: 责编: 时间:2023-08-09 23:02:55 249观看
导读前言Asp.net core作为一种高效、跨平台的web框架,在开发过程中,我们常常需要在后台执行定时任务,例如清理无用文件、生成报告、发送邮件等任务。对于这种需求,我们可以使用第三方库(如Hangfire或Quartz.NET)来实现任务调度

jlX28资讯网——每日最新资讯28at.com

前言

Asp core作为一种高效、跨平台的web框架,在开发过程中,我们常常需要在后台执行定时任务,例如清理无用文件、生成报告、发送邮件等任务。对于这种需求,我们可以使用第三方库(如Hangfire或Quartz.NET)来实现任务调度和执行,也可以使用asp core自带的Hosting模块和System.Timers.Timer类来实现简单的定时任务。jlX28资讯网——每日最新资讯28at.com

本篇文章主要介绍如何使用Asp core自带的Hosting模块和System.Timers.Timer类,以及Hangfire和Quartz.NET分别实现定时任务。将展示一个完整的示例代码,并详细解释代码中各个部分的含义和作用,以帮助理解实现过程和相关知识点。jlX28资讯网——每日最新资讯28at.com

自带的Hosting模块实现任务调度

下面将分步骤详细介绍如何使用asp core自带的Hosting模块和System.Timers.Timer类来实现定时任务。jlX28资讯网——每日最新资讯28at.com

  • 创建一个控制台应用程序

首先,在Visual Studio中创建一个控制台应用程序。jlX28资讯网——每日最新资讯28at.com

  • 添加必要的NuGet包

在项目中添加以下NuGet包:jlX28资讯网——每日最新资讯28at.com

  • Microsoft.Extensions.Hosting.Abstractions
  • Microsoft.Extensions.Hosting

这两个NuGet包提供了asp core的Hosting模块和应用程序生命周期管理功能。jlX28资讯网——每日最新资讯28at.com

  • 创建一个HostBuilder对象

在Main方法中创建一个HostBuilder对象:jlX28资讯网——每日最新资讯28at.com

static void Main(string[] args){    var builder = new HostBuilder()            .UseConsoleLifetime()   // 控制台生命周期管理            .ConfigureServices((hostContext, services) =>            {                 // 配置服务            });                       builder.Build().Run();}

HostBuilder提供了配置应用程序服务、托管生命周期、配置应用程序配置等功能。可以使用UseConsoleLifetime方法来配置应用程序的控制台生命周期管理。jlX28资讯网——每日最新资讯28at.com

  • 添加定时任务

在ConfigureServices方法中添加定时任务:jlX28资讯网——每日最新资讯28at.com

ConfigureServices((hostContext, services) =>{    // 添加定时器组件    services.AddHostedService<MyTimer>();});

上面的代码中,我们向服务容器中添加了一个MyTimer类,这个类实现了IHostedService接口。jlX28资讯网——每日最新资讯28at.com

  • 实现IHostedService接口

在MyTimer类中实现IHostedService接口:jlX28资讯网——每日最新资讯28at.com

// MyTimer.cspublic class MyTimer : IHostedService, IDisposable{    private readonly Timer _timer;    public MyTimer()    {        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); // 每5秒执行一次DoWork方法    }    public Task StartAsync(CancellationToken cancellationToken)    {        Console.WriteLine("定时任务已启动");        return Task.CompletedTask;    }    public Task StopAsync(CancellationToken cancellationToken)    {        Console.WriteLine("定时任务已停止");        return Task.CompletedTask;    }    public void Dispose()    {        _timer?.Dispose();    }    private void DoWork(object state)    {        Console.WriteLine($"定时任务执行中,当前时间:{DateTime.Now}");    }}

MyTimer类继承了IHostedService接口,该接口定义了应用程序生命周期管理的方法。在MyTimer的构造函数中,我们创建了一个计时器,并在每5秒钟的时间间隔内执行DoWork方法。在StartAsync方法中,输出“定时任务已启动”信息;在StopAsync方法中,输出“定时任务已停止”信息。Dispose方法用于释放计时器资源。jlX28资讯网——每日最新资讯28at.com

  • 运行应用程序

完成上面的步骤后,我们可以运行应用程序,观察控制台输出的结果jlX28资讯网——每日最新资讯28at.com

每5秒钟控制台会输出一条类似于“定时任务执行中,当前时间:2023/06/12 15:34:48”的信息,表示定时任务正在运行。当我们手动停止应用程序时,控制台会输出“定时任务已停止”信息,表示定时任务已经被成功停止。jlX28资讯网——每日最新资讯28at.com

至此,我们成功地使用asp core自带的Hosting模块和System.Timers.Timer类实现了定时任务。在实际应用中,可以根据需求添加更多的定时任务,并调整计时器的时间间隔等参数。jlX28资讯网——每日最新资讯28at.com

Hangfire实现任务调度

jlX28资讯网——每日最新资讯28at.com

jlX28资讯网——每日最新资讯28at.com

下面将详细介绍如何使用asp core引入Hangfire来实现任务调度和执行。jlX28资讯网——每日最新资讯28at.com

  • 创建一个asp core Web应用程序

首先,在Visual Studio中创建一个asp core Web项目。jlX28资讯网——每日最新资讯28at.com

  1. 添加必要的NuGet包

在项目中添加以下NuGet包:jlX28资讯网——每日最新资讯28at.com

  • Hangfire.AspNetCore
  • Hangfire.SqlServer

这两个NuGet包提供了Hangfire框架所需的组件和功能。jlX28资讯网——每日最新资讯28at.com

  • 配置Hangfire

在Startup.cs文件中配置Hangfire:jlX28资讯网——每日最新资讯28at.com

public void ConfigureServices(IServiceCollection services){    // 配置Hangfire    GlobalConfiguration.Configuration.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection"));    services.AddHangfire(config => config.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));    services.AddHangfireServer();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){    // 启用Hangfire仪表板    app.UseHangfireDashboard();    // ...}

上述代码中,我们在ConfigureServices方法中配置了Hangfire,并使用AddHangfireServer方法启用了Hangfire服务。同时,我们也针对数据库进行了配置。jlX28资讯网——每日最新资讯28at.com

在Configure方法中,我们除了启用了Hangfire仪表板之外,还需要在中间件管道中注册Hangfire服务:jlX28资讯网——每日最新资讯28at.com

app.UseHangfireServer();
  • 添加定时任务

在Actions文件夹内创建ScheduledTasks类,并添加定时任务:jlX28资讯网——每日最新资讯28at.com

public class ScheduledTasks{    public void DoSomething()    {        Console.WriteLine("Hangfire: Doing something...");    }    public void DoSomethingElse()    {        Console.WriteLine("Hangfire: Doing something else...");    }}

在上面的代码中,我们创建了两个定时任务:DoSomething和DoSomethingElse。jlX28资讯网——每日最新资讯28at.com

  • 注册定时任务

在ConfigureServices方法中注册定时任务:jlX28资讯网——每日最新资讯28at.com

services.AddTransient<ScheduledTasks>();// 注册定时任务RecurringJob.AddOrUpdate<ScheduledTasks>(x => x.DoSomething(), Cron.Minutely);RecurringJob.AddOrUpdate<ScheduledTasks>(x => x.DoSomethingElse(), Cron.Hourly);

在上面的代码中,我们使用AddOrUpdate方法来注册定时任务。第一个参数为委托表达式,指定了要执行的任务;第二个参数为Cron表达式,指定了任务的执行时间。jlX28资讯网——每日最新资讯28at.com

在上面的代码中,我们每分钟执行DoSomething任务,每小时执行DoSomethingElse任务。jlX28资讯网——每日最新资讯28at.com

  • 运行应用程序

完成上面的步骤后,我们可以运行应用程序在Hangfire仪表板中查看定时任务的执行情况。jlX28资讯网——每日最新资讯28at.com

在仪表板的"Recurring jobs"选项卡中,我们可以看到我们刚刚注册的两个定时任务以及它们的下一次执行时间。在任务执行时,我们可以在控制台输出中看到“Hangfire: Doing something…”或“Hangfire: Doing something else…”等信息,表示任务已经被成功执行。jlX28资讯网——每日最新资讯28at.com

至此,我们成功地使用asp core引入Hangfire来实现任务调度和执行,并注册了两个定时任务进行演示。在实际应用中,我们可以根据需求添加更多的定时任务,并根据具体业务场景进行调整和优化。jlX28资讯网——每日最新资讯28at.com

jlX28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-5152-0.html如何使用Asp.net Core实现定时任务,轻松解决任务调度问题!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 用这五个技巧将你的Vue技能提升到新的高度

下一篇: SpringBoot整合RabbitMQ延迟队列&amp;优先级队列详解

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • CSS单标签实现转转logo

    CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • ESG的面子与里子

    ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
Top
Baidu
map