IHostApplicationLifetime接口允许用户接收应用程序生命周期事件的通知。该接口并非为用户设计用来替换或重写的,其主要作用是将应用程序生命周期的变化通知用户。换句话说,这个接口仅用于通知功能,用户无需实现或重写它IHostApplicationLifetime 提供了三个核心事件,用于处理应用程序生命周期的关键时刻:
ApplicationStarted方法:在应用程序完全启动(所有服务已配置完成)后触发,通常用于执行应用程序启动后的自定义逻辑。
ApplicationStopping方法:在应用程序即将停止时触发。此阶段通常仍可进行一些清理操作,比如释放资源或保存数据。
ApplicationStopped方法:在应用程序完全停止后触发。此阶段应只执行简单的终止逻辑,因为此时应用程序的其他部分可能已经被释放。
2. 例子
await Host.CreateDefaultBuilder(args).ConfigureServices((hostContext, services) =>{services.AddHostedService(); }).ConfigureLogging(logging =>{logging.ClearProviders();logging.AddConsole();}).Build().RunAsync();public class SampleHostedService : IHostedService{IHostApplicationLifetime _lifetime;ILogger _log;public SampleHostedService(IHostApplicationLifetime lifetime, ILoggerlogger) {_lifetime = lifetime;_lifetime.ApplicationStarted.Register(OnStarted);_lifetime.ApplicationStopping.Register(OnStopping);_lifetime.ApplicationStopped.Register(OnStopped);_log = logger;}private void OnStopped(){_log.LogInformation("OnStopped has been called.");}private void OnStopping(){_log.LogInformation("OnStopping has been called.");}private void OnStarted(){_log.LogInformation("OnStarted has been called.");}public Task StartAsync(CancellationToken cancellationToken){_log.LogInformation("Start Sample Host");return Task.CompletedTask;}public Task StopAsync(CancellationToken cancellationToken){_log.LogInformation("End Sample Host");return Task.CompletedTask;}}
源代码地址:
https://github.com/bingbing-gui/AspNetCore-Skill/tree/master/src/aspnetcore-knowledge-point/generic-host-lifetime
