托管服务简介

  1. 场景:代码运行在后台。比如服务器启动的时候在后台预先加载数据到缓存,每天凌晨3点把数据导出到备份数据库;每隔5秒钟在两张表之间同步一次数据。
  2. 托管服务实现IHostService接口,一般边写从BackgroundService继承的类。
  3. services.AddHostedService();

实例代码

  1. namespace HostServices1
  2. {
  3. public class DemoHostSevices : BackgroundService
  4. {
  5. //因为这个是单例的不能获取scope的对象。只能通过从IServiceScopeFactory 获取对象。
  6. private readonly IServiceScope scope;
  7. public DemoHostSevices(IServiceScopeFactory serviceScopeFactory)
  8. {
  9. this.scope = serviceScopeFactory.CreateScope();
  10. }
  11. public override void Dispose()
  12. {
  13. scope.Dispose();
  14. base.Dispose();
  15. }
  16. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  17. {
  18. if (!stoppingToken.IsCancellationRequested)
  19. {
  20. var test1 = scope.ServiceProvider.GetRequiredService<Test1>();
  21. while (!stoppingToken.IsCancellationRequested)
  22. {
  23. Console.WriteLine($"{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}--我是后台HostService--runing");
  24. test1.Method1();
  25. await Task.Delay(1000 * 5);
  26. }
  27. }
  28. Console.WriteLine("111");
  29. }
  30. }
  31. }
  32. //注册使用:
  33. builder.Services.AddHostedService<DemoHostSevices>();
  34. builder.Services.AddScoped<Test1>();