托管服务简介
- 场景:代码运行在后台。比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨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>();