日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

如何使用Asp.net Core實現(xiàn)定時任務,輕松解決任務調(diào)度問題!

來源: 責編: 時間:2023-08-09 23:02:55 356觀看
導讀前言Asp.net core作為一種高效、跨平臺的web框架,在開發(fā)過程中,我們常常需要在后臺執(zhí)行定時任務,例如清理無用文件、生成報告、發(fā)送郵件等任務。對于這種需求,我們可以使用第三方庫(如Hangfire或Quartz.NET)來實現(xiàn)任務調(diào)度

Kvw28資訊網(wǎng)——每日最新資訊28at.com

前言

Asp core作為一種高效、跨平臺的web框架,在開發(fā)過程中,我們常常需要在后臺執(zhí)行定時任務,例如清理無用文件、生成報告、發(fā)送郵件等任務。對于這種需求,我們可以使用第三方庫(如Hangfire或Quartz.NET)來實現(xiàn)任務調(diào)度和執(zhí)行,也可以使用asp core自帶的Hosting模塊和System.Timers.Timer類來實現(xiàn)簡單的定時任務。Kvw28資訊網(wǎng)——每日最新資訊28at.com

本篇文章主要介紹如何使用Asp core自帶的Hosting模塊和System.Timers.Timer類,以及Hangfire和Quartz.NET分別實現(xiàn)定時任務。將展示一個完整的示例代碼,并詳細解釋代碼中各個部分的含義和作用,以幫助理解實現(xiàn)過程和相關(guān)知識點。Kvw28資訊網(wǎng)——每日最新資訊28at.com

自帶的Hosting模塊實現(xiàn)任務調(diào)度

下面將分步驟詳細介紹如何使用asp core自帶的Hosting模塊和System.Timers.Timer類來實現(xiàn)定時任務。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 創(chuàng)建一個控制臺應用程序

首先,在Visual Studio中創(chuàng)建一個控制臺應用程序。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 添加必要的NuGet包

在項目中添加以下NuGet包:Kvw28資訊網(wǎng)——每日最新資訊28at.com

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

這兩個NuGet包提供了asp core的Hosting模塊和應用程序生命周期管理功能。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 創(chuàng)建一個HostBuilder對象

在Main方法中創(chuàng)建一個HostBuilder對象:Kvw28資訊網(wǎng)——每日最新資訊28at.com

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

HostBuilder提供了配置應用程序服務、托管生命周期、配置應用程序配置等功能。可以使用UseConsoleLifetime方法來配置應用程序的控制臺生命周期管理。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 添加定時任務

在ConfigureServices方法中添加定時任務:Kvw28資訊網(wǎng)——每日最新資訊28at.com

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

上面的代碼中,我們向服務容器中添加了一個MyTimer類,這個類實現(xiàn)了IHostedService接口。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 實現(xiàn)IHostedService接口

在MyTimer類中實現(xiàn)IHostedService接口:Kvw28資訊網(wǎng)——每日最新資訊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秒執(zhí)行一次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($"定時任務執(zhí)行中,當前時間:{DateTime.Now}");    }}

MyTimer類繼承了IHostedService接口,該接口定義了應用程序生命周期管理的方法。在MyTimer的構(gòu)造函數(shù)中,我們創(chuàng)建了一個計時器,并在每5秒鐘的時間間隔內(nèi)執(zhí)行DoWork方法。在StartAsync方法中,輸出“定時任務已啟動”信息;在StopAsync方法中,輸出“定時任務已停止”信息。Dispose方法用于釋放計時器資源。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 運行應用程序

完成上面的步驟后,我們可以運行應用程序,觀察控制臺輸出的結(jié)果Kvw28資訊網(wǎng)——每日最新資訊28at.com

每5秒鐘控制臺會輸出一條類似于“定時任務執(zhí)行中,當前時間:2023/06/12 15:34:48”的信息,表示定時任務正在運行。當我們手動停止應用程序時,控制臺會輸出“定時任務已停止”信息,表示定時任務已經(jīng)被成功停止。Kvw28資訊網(wǎng)——每日最新資訊28at.com

至此,我們成功地使用asp core自帶的Hosting模塊和System.Timers.Timer類實現(xiàn)了定時任務。在實際應用中,可以根據(jù)需求添加更多的定時任務,并調(diào)整計時器的時間間隔等參數(shù)。Kvw28資訊網(wǎng)——每日最新資訊28at.com

Hangfire實現(xiàn)任務調(diào)度

Kvw28資訊網(wǎng)——每日最新資訊28at.com

Kvw28資訊網(wǎng)——每日最新資訊28at.com

下面將詳細介紹如何使用asp core引入Hangfire來實現(xiàn)任務調(diào)度和執(zhí)行。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 創(chuàng)建一個asp core Web應用程序

首先,在Visual Studio中創(chuàng)建一個asp core Web項目。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  1. 添加必要的NuGet包

在項目中添加以下NuGet包:Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • Hangfire.AspNetCore
  • Hangfire.SqlServer

這兩個NuGet包提供了Hangfire框架所需的組件和功能。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 配置Hangfire

在Startup.cs文件中配置Hangfire:Kvw28資訊網(wǎng)——每日最新資訊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服務。同時,我們也針對數(shù)據(jù)庫進行了配置。Kvw28資訊網(wǎng)——每日最新資訊28at.com

在Configure方法中,我們除了啟用了Hangfire儀表板之外,還需要在中間件管道中注冊Hangfire服務:Kvw28資訊網(wǎng)——每日最新資訊28at.com

app.UseHangfireServer();
  • 添加定時任務

在Actions文件夾內(nèi)創(chuàng)建ScheduledTasks類,并添加定時任務:Kvw28資訊網(wǎng)——每日最新資訊28at.com

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

在上面的代碼中,我們創(chuàng)建了兩個定時任務:DoSomething和DoSomethingElse。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 注冊定時任務

在ConfigureServices方法中注冊定時任務:Kvw28資訊網(wǎng)——每日最新資訊28at.com

services.AddTransient<ScheduledTasks>();// 注冊定時任務RecurringJob.AddOrUpdate<ScheduledTasks>(x => x.DoSomething(), Cron.Minutely);RecurringJob.AddOrUpdate<ScheduledTasks>(x => x.DoSomethingElse(), Cron.Hourly);

在上面的代碼中,我們使用AddOrUpdate方法來注冊定時任務。第一個參數(shù)為委托表達式,指定了要執(zhí)行的任務;第二個參數(shù)為Cron表達式,指定了任務的執(zhí)行時間。Kvw28資訊網(wǎng)——每日最新資訊28at.com

在上面的代碼中,我們每分鐘執(zhí)行DoSomething任務,每小時執(zhí)行DoSomethingElse任務。Kvw28資訊網(wǎng)——每日最新資訊28at.com

  • 運行應用程序

完成上面的步驟后,我們可以運行應用程序在Hangfire儀表板中查看定時任務的執(zhí)行情況。Kvw28資訊網(wǎng)——每日最新資訊28at.com

在儀表板的"Recurring jobs"選項卡中,我們可以看到我們剛剛注冊的兩個定時任務以及它們的下一次執(zhí)行時間。在任務執(zhí)行時,我們可以在控制臺輸出中看到“Hangfire: Doing something…”或“Hangfire: Doing something else…”等信息,表示任務已經(jīng)被成功執(zhí)行。Kvw28資訊網(wǎng)——每日最新資訊28at.com

至此,我們成功地使用asp core引入Hangfire來實現(xiàn)任務調(diào)度和執(zhí)行,并注冊了兩個定時任務進行演示。在實際應用中,我們可以根據(jù)需求添加更多的定時任務,并根據(jù)具體業(yè)務場景進行調(diào)整和優(yōu)化。Kvw28資訊網(wǎng)——每日最新資訊28at.com

Kvw28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5152-0.html如何使用Asp.net Core實現(xiàn)定時任務,輕松解決任務調(diào)度問題!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 用這五個技巧將你的Vue技能提升到新的高度

下一篇: SpringBoot整合RabbitMQ延遲隊列&amp;優(yōu)先級隊列詳解

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 基隆市| 宝坻区| 鹤峰县| 比如县| 河津市| 两当县| 蓝山县| 大丰市| 洛南县| 商城县| 涪陵区| 鞍山市| 龙门县| 蒙自县| 阿图什市| 界首市| 桓台县| 红桥区| 南投市| 格尔木市| 乃东县| 翁源县| 东丰县| 寻乌县| 徐州市| 石城县| 莎车县| 广安市| 乾安县| 横山县| 龙门县| 阿克陶县| 惠州市| 英吉沙县| 内黄县| 大邑县| 乌鲁木齐县| 博罗县| 攀枝花市| 洞头县| 比如县|