ASP.NET Core Web 主机:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/web-host?view=aspnetcore-5.0
主机是封装应用资源的对象,例如:
对应 Program.cs 中的 host.Run();
可以在主机启动前通过 CreateHostBuilder 进行配置
CreateHostBuilder 方法
// 内容根目录
var root = hostingContext.HostingEnvironment.ContentRootPath;
// 环境
var envName = hostingContext.HostingEnvironment.EnvironmentName;
ConfigureWebHostDefaults 方法
Program.cs
var applicationLifetime = host.Services.GetRequiredService<IHostApplicationLifetime>();
applicationLifetime.ApplicationStarted.Register((() =>
{
Console.WriteLine("Application Started");
}));
applicationLifetime.ApplicationStopping.Register((() =>
{
Console.WriteLine("Application Stopping");
}));
applicationLifetime.ApplicationStopped.Register((() =>
{
Console.WriteLine("Application Stopped");
}));
用于监控 Host 主机的启动,停止
同样的监听
将 IHostEnvironment 服务注册到一个类,获取以下设置的信息
新建 MyHostedService.cs
namespace HelloApi.Services
{
public class MyHostedService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
public Task StopAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
}
在 IHostedService 的基础之上,asp .net core 还提供了另一个封装 BackgroundService
public class MyBackgroundService : BackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
throw new NotImplementedException();
}
}
在 StopAsync 之前会通过 CancellationToken 通知,执行一些操作
public class MyBackgroundService : BackgroundService
{
private readonly ILogger<MyBackgroundService> _logger;
public MyBackgroundService(ILogger<MyBackgroundService> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// 只要不停止就一直执行
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("date:{0}", DateTime.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
在 Startup.cs 中注入
services.AddHostedService<MyBackgroundService>();
启动程序,控制台不断输出时间
请求接口也可以正常访问
asp .net core 通过这样一种 HostedService 的方式将后台常驻服务与 web api 的请求同时放到一个托管基类
https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/HelloApi
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。