700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ASP.NET Core使用Hangfire做定时任务

ASP.NET Core使用Hangfire做定时任务

时间:2019-06-21 14:40:33

相关推荐

ASP.NET Core使用Hangfire做定时任务

1、新建 Core项目,使用管理NuGet程序包添加Hangfire,然后 Core Startup 类中添加如下代码

using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;using Hangfire;namespace MyWebApplication{public class Startup{public void ConfigureServices(IServiceCollection services){services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));services.AddHangfireServer();}public void Configure(IApplicationBuilder app){app.UseHangfireDashboard();}}}

运行以后可以在浏览器中输入http://localhost:5000/hangfire,即运行的地址栏后面加/hangfire,既可以看到效果,如下

全部代码如下:

startup.cs

using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Hangfire;namespace CORETest{public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddRazorPages();//应用程序的入口点和生命周期---应用程序启动起处理的的任务services.AddHostedService<FirstStartService>();services.AddHostedService<SecondStartService>();//Hangfire定时任务services.AddHangfire(a => a.UseSqlServerStorage("Data Source=localhost;Initial Catalog=TestHangfire;Integrated Security=True;"));services.AddHangfireServer();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime){//应用程序的入口点和生命周期---IHostApplicationLifetime 除了程序进入点外,Host的启动和停止, Core不像 MVC用继承的方式捕捉启动及停止事件,//而是透过Startup.Configure注入IHostApplicationLifetime来补捉Application启动停止事件lifetime.ApplicationStarted.Register(async () => await Task.Run(() => Console.WriteLine("IHostApplicationLifetime......Started")));lifetime.ApplicationStopping.Register(async () => await Task.Run(() => Console.WriteLine("IHostApplicationLifetime......Stopping")));lifetime.ApplicationStopped.Register(async () => await Task.Run(() => Console.WriteLine("IHostApplicationLifetime......Stopped")));//停止应用程序var tt = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(a =>{System.Threading.Thread.Sleep(TimeSpan.FromSeconds(100));Console.WriteLine("IHostApplicationLifetime......Stopp---------ing");lifetime.StopApplication();}));tt.Start();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();//Hangfire定时任务app.UseHangfireDashboard();app.UseEndpoints(endpoints =>{endpoints.MapRazorPages();});}}}

firststartservice.cs

using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Threading;using System.Threading.Tasks;namespace CORETest{public class FirstStartService : IHostedService{public async Task StartAsync(CancellationToken cancellationToken){await Task.Run(() => { Console.WriteLine("FirstStartService......StartAsync"); }, cancellationToken);//hangfire定时任务var id = Hangfire.BackgroundJob.Enqueue(() => Console.WriteLine("插入队列的任务"));Hangfire.BackgroundJob.Schedule(() => Console.WriteLine("延迟的任务"), TimeSpan.FromSeconds(5));Hangfire.RecurringJob.AddOrUpdate(() => Console.WriteLine("循环执行的任务"), Hangfire.Cron.Minutely);Hangfire.BackgroundJob.ContinueWith(id, () => Console.WriteLine("指定任务执行之后执行的任务"));}public async Task StopAsync(CancellationToken cancellationToken){await Task.Run(() => { Console.WriteLine("FirstStartService......StopAsync"); }, cancellationToken);}}}

secondstartservice.cs

using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Threading;using System.Threading.Tasks;namespace CORETest{public class SecondStartService : IHostedService{public async Task StartAsync(CancellationToken cancellationToken){await Task.Run(() => { Console.WriteLine("SecondStartService......"); }, cancellationToken);}public async Task StopAsync(CancellationToken cancellationToken){await Task.Run(() => { Console.WriteLine("SecondStartService......StopAsync"); }, cancellationToken);}}}

2、在OWIN Startup 使用如下,可以参考/LongtengGensSupreme/article/details/107704670?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162685879516780255232361%2522%252C%2522scm%2522%253A%25220713.130102334.pc%255Fblog.%2522%257D&request_id=162685879516780255232361&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-107704670.pc_v2_rank_blog_default&utm_term=Hangfire&spm=1018.2226.3001.4450

using Hangfire;using Microsoft.Owin;using Owin;[assembly: OwinStartup(typeof(MyWebApplication.Startup))]namespace MyWebApplication{public class Startup{public void Configuration(IAppBuilder app){GlobalConfiguration.Configuration.UseSqlServerStorage("<name or connection string>");app.UseHangfireDashboard();app.UseHangfireServer();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。