• ASP.NETCORE 启动事件的两种捕获方式--可以自定义预加载和卸载相关任务


    1、新建项目ASP.NETCORE项目ASP.NETCORETest

    2、在Startup.cs中添加如下,包括2种方式捕获启动和停止事件接口,其中FirstStartService : IHostedService ,SecondStartService : IHostedService,IHostedService是Microsoft.Extensions.Hosting下的IHostedService,该接口包括StartAsync,StopAsync,主应用程序启动和停止的接口

    第一种方式如下

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddRazorPages();
    //应用程序启动起处理的的任务
    services.AddHostedService<FirstStartService>();
    services.AddHostedService<SecondStartService>();
    }

    FirstStartService代码

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

    SecondStartService代码

    using Microsoft.Extensions.Hosting;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ASP.NETCORETest
    {
        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);
            }
        }
    }

    第二种方式是使用IHostApplicationLifetime,该接口可以捕获lHost的启动和停事件,

    第二种方式如下

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
            {
                //IHostApplicationLifetime 除了程序进入点外,Host的启动和停止,ASP.NET Core不像ASP.NET 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(10));
                    Console.WriteLine("IHostApplicationLifetime......Stopp---------ing");
                    lifetime.StopApplication();
                })) ;
                tt.Start();
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                }
    
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapRazorPages();
                });
            }

    Program.cs中主方法如下:

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace ASP.NETCORETest
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
        }
    }
    龙腾一族至尊龙骑
  • 相关阅读:
    kafka 流式计算
    解决山地车令人讨厌的中轴异响及其他异响问题
    go语言通道详解
    使用Spring Cloud连接不同服务
    并发之痛 Thread,Goroutine,Actor
    用go语言实现线程池
    golang go语言通道类型的通道示例 通道的通道
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    spring5 reactive
    Go 语言和 Scala 语言对比
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/15039432.html
Copyright © 2020-2023  润新知