tnblog
首页
视频
资源
登录

.net core 3.1 服务承载【BackgroundService】

10334人阅读 2021/2/7 22:23 总访问:3660705 评论:0 收藏:0 手机
分类: .net后台框架

.netcore

.net core 3.1 服务承载【BackgroundService】

目录

内容

.net core 2.1后出了一个抽象类BackgroundService实现了IHostedService类的功能,并通过实现ExecuteAsync抽象方法实现后台长时间执行的效果。这里我们使用PerformanceMetricsBackgroundService的类去实现BackgroundService这个抽象类的ExecuteAsync方法,去实现与PerformanceMetricsCollector一样的效果。

  1. public class PerformanceMetricsBackgroundService : BackgroundService
  2. {
  3. private readonly IProcessorMetricsCollector _processorMetricsCollector;
  4. private readonly INetworkMetricsCollector _networkMetricsCollector;
  5. private readonly IMetricsDeliverer _metricsDeliverer;
  6. private readonly IMemoryMetricsCollector _memoryMetricsCollector;
  7. private readonly IOptions<MetricsCollectionOptions> _optionsAccessor;
  8. private readonly ILogger<PerformanceMetricsBackgroundService> _logger;
  9. public PerformanceMetricsBackgroundService(
  10. IProcessorMetricsCollector processorMetricsCollector,
  11. INetworkMetricsCollector networkMetricsCollector,
  12. IMetricsDeliverer metricsDeliverer,
  13. IMemoryMetricsCollector memoryMetricsCollector,
  14. IOptions<MetricsCollectionOptions> optionsAccessor,
  15. ILogger<PerformanceMetricsBackgroundService> logger
  16. )
  17. {
  18. _processorMetricsCollector = processorMetricsCollector;
  19. _networkMetricsCollector = networkMetricsCollector;
  20. _metricsDeliverer = metricsDeliverer;
  21. _memoryMetricsCollector = memoryMetricsCollector;
  22. _optionsAccessor = optionsAccessor;
  23. _logger = logger;
  24. }
  25. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  26. {
  27. while (!stoppingToken.IsCancellationRequested)
  28. {
  29. try
  30. {
  31. // 执行的方法
  32. await Callback();
  33. }
  34. catch (Exception ex)
  35. {
  36. _logger.LogError(ex,$"Job {nameof(PerformanceMetricsBackgroundService)} threw an exception!");
  37. }
  38. // 间隔的时间
  39. await Task.Delay(_optionsAccessor.Value.CaptureInterval);
  40. }
  41. }
  42. private async Task Callback()
  43. {
  44. // 通过不同指标获取实例
  45. var performanceMetrics = new PerformanceMetrics()
  46. {
  47. Memory = _memoryMetricsCollector.GetUsage(),
  48. Network = _networkMetricsCollector.GetThroughput(),
  49. Processor = _processorMetricsCollector.GetUsage()
  50. };
  51. await _metricsDeliverer.DeliverAsync(performanceMetrics);
  52. }
  53. }

注册服务

  1. .AddSingleton<IHostedService, PerformanceMetricsBackgroundService>()

测试

我们来分析一下BackgroundService的源代码

BackgroundService的优点

优点
可以快速的实现后台任务
不会阻塞应用启动(除非重写StartAsync

BackgroundService的缺点

缺点
不适合占用资源多的后台任务
不适合实现太多的后台任务(可能会影响性能)
Web应用水平扩展时会遇到幂等性问题

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术