托管服务简介
- 场景:代码运行在后台。比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨3点把数据导出到备份数据库;每隔5秒钟在两张表之间同步一次数据。
- 托管服务实现IHostService接口,一般边写从BackgroundService继承的类。
- services.AddHostedService();
实例代码
namespace HostServices1{ public class DemoHostSevices : BackgroundService { //因为这个是单例的不能获取scope的对象。只能通过从IServiceScopeFactory 获取对象。 private readonly IServiceScope scope; public DemoHostSevices(IServiceScopeFactory serviceScopeFactory) { this.scope = serviceScopeFactory.CreateScope(); } public override void Dispose() { scope.Dispose(); base.Dispose(); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (!stoppingToken.IsCancellationRequested) { var test1 = scope.ServiceProvider.GetRequiredService<Test1>(); while (!stoppingToken.IsCancellationRequested) { Console.WriteLine($"{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}--我是后台HostService--runing"); test1.Method1(); await Task.Delay(1000 * 5); } } Console.WriteLine("111"); } }}//注册使用:builder.Services.AddHostedService<DemoHostSevices>();builder.Services.AddScoped<Test1>();