ToB企服应用市场:ToB评测及商务社交产业平台

标题: .NET 8 中的后台服务:IHostedService 和 BackgroundService [打印本页]

作者: 万有斥力    时间: 2024-6-20 10:29
标题: .NET 8 中的后台服务:IHostedService 和 BackgroundService
NET 8 引入了强大的功能,用于使用 和 管理后台使命。这些服务使长时间运行的操作(如计划使命、后台处理和定期维护使命)可以或许无缝集成到您的应用程序中。本文探讨了这些新功能,并提供了实际示例来资助你入门。您可以在我的 GitHub 存储库中找到这些示例的源代码。IHostedServiceBackgroundService
什么是后台服务?

.NET 中的后台服务允许您在后台独立于主应用程序线程运行使命。这对于需要连续或定期运行而不阻塞主应用程序流的使命至关重要。
IHostedService接口

该接口定义了两种方法:IHostedService
 
  1. 1 StartAsync(CancellationToken cancellationToken):在应用程序主机启动时调用。
  2. 2 StopAsync(CancellationToken cancellationToken):在应用程序主机执行正常关闭时调用。
复制代码
IHostedService 实现示例:
  1. 1 using System;
  2. 2 using System.Threading;
  3. 3 using System.Threading.Tasks;
  4. 4 using Microsoft.Extensions.Hosting;
  5. 5 using Microsoft.Extensions.Logging;
  6. 6
  7. 7 public class TimedHostedService : IHostedService, IDisposable
  8. 8 {
  9. 9     private readonly ILogger<TimedHostedService> _logger;
  10. 10     private Timer _timer;
  11. 11
  12. 12     public TimedHostedService(ILogger<TimedHostedService> logger)
  13. 13     {
  14. 14         _logger = logger;
  15. 15     }
  16. 16
  17. 17     public Task StartAsync(CancellationToken cancellationToken)
  18. 18     {
  19. 19         _logger.LogInformation("Timed Hosted Service running.");
  20. 20
  21. 21         _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
  22. 22
  23. 23         return Task.CompletedTask;
  24. 24     }
  25. 25
  26. 26     private void DoWork(object state)
  27. 27     {
  28. 28         _logger.LogInformation("Timed Hosted Service is working.");
  29. 29     }
  30. 30
  31. 31     public Task StopAsync(CancellationToken cancellationToken)
  32. 32     {
  33. 33         _logger.LogInformation("Timed Hosted Service is stopping.");
  34. 34
  35. 35         _timer?.Change(Timeout.Infinite, 0);
  36. 36
  37. 37         return Task.CompletedTask;
  38. 38     }
  39. 39
  40. 40     public void Dispose()
  41. 41     {
  42. 42         _timer?.Dispose();
  43. 43     }
  44. 44 }
复制代码
BackgroundService类

该类是一个抽象基类,用于简化后台使命的实现。它提供了一种方法来覆盖:BackgroundService
BackgroundService 实现示例:
  1. 1 using System;
  2. 2 using System.Threading;
  3. 3 using System.Threading.Tasks;
  4. 4 using Microsoft.Extensions.Hosting;
  5. 5 using Microsoft.Extensions.Logging;
  6. 6
  7. 7 public class TimedBackgroundService : BackgroundService
  8. 8 {
  9. 9     private readonly ILogger<TimedBackgroundService> _logger;
  10. 10
  11. 11     public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
  12. 12     {
  13. 13         _logger = logger;
  14. 14     }
  15. 15
  16. 16     protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  17. 17     {
  18. 18         _logger.LogInformation("Timed Background Service running.");
  19. 19
  20. 20         while (!stoppingToken.IsCancellationRequested)
  21. 21         {
  22. 22             _logger.LogInformation("Timed Background Service is working.");
  23. 23             await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
  24. 24         }
  25. 25
  26. 26         _logger.LogInformation("Timed Background Service is stopping.");
  27. 27     }
  28. 28 }
复制代码
 
 
主要区别

结论

.NET 8 的后台服务(通过 和 )提供了一种可靠且灵活的方式来管理后台使命。通过根据您的需求选择适当的抽象,您可以有用地在应用程序中实现和管理长时间运行的操作。这些新功能增强了创建相应迅速、可伸缩且可维护的 .NET 应用程序的能力。IHostedService BackgroundService
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4