
.net core 3.1 服务承载【BackgroundService】
目录
内容
在.net core 2.1
后出了一个抽象类BackgroundService
实现了IHostedService
类的功能,并通过实现ExecuteAsync
抽象方法实现后台长时间执行的效果。这里我们使用PerformanceMetricsBackgroundService
的类去实现BackgroundService
这个抽象类的ExecuteAsync
方法,去实现与PerformanceMetricsCollector
一样的效果。
public class PerformanceMetricsBackgroundService : BackgroundService
{
private readonly IProcessorMetricsCollector _processorMetricsCollector;
private readonly INetworkMetricsCollector _networkMetricsCollector;
private readonly IMetricsDeliverer _metricsDeliverer;
private readonly IMemoryMetricsCollector _memoryMetricsCollector;
private readonly IOptions<MetricsCollectionOptions> _optionsAccessor;
private readonly ILogger<PerformanceMetricsBackgroundService> _logger;
public PerformanceMetricsBackgroundService(
IProcessorMetricsCollector processorMetricsCollector,
INetworkMetricsCollector networkMetricsCollector,
IMetricsDeliverer metricsDeliverer,
IMemoryMetricsCollector memoryMetricsCollector,
IOptions<MetricsCollectionOptions> optionsAccessor,
ILogger<PerformanceMetricsBackgroundService> logger
)
{
_processorMetricsCollector = processorMetricsCollector;
_networkMetricsCollector = networkMetricsCollector;
_metricsDeliverer = metricsDeliverer;
_memoryMetricsCollector = memoryMetricsCollector;
_optionsAccessor = optionsAccessor;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
// 执行的方法
await Callback();
}
catch (Exception ex)
{
_logger.LogError(ex,$"Job {nameof(PerformanceMetricsBackgroundService)} threw an exception!");
}
// 间隔的时间
await Task.Delay(_optionsAccessor.Value.CaptureInterval);
}
}
private async Task Callback()
{
// 通过不同指标获取实例
var performanceMetrics = new PerformanceMetrics()
{
Memory = _memoryMetricsCollector.GetUsage(),
Network = _networkMetricsCollector.GetThroughput(),
Processor = _processorMetricsCollector.GetUsage()
};
await _metricsDeliverer.DeliverAsync(performanceMetrics);
}
}
注册服务
.AddSingleton<IHostedService, PerformanceMetricsBackgroundService>()
测试
我们来分析一下BackgroundService
的源代码
BackgroundService的优点
优点 |
---|
可以快速的实现后台任务 |
不会阻塞应用启动(除非重写StartAsync ) |
BackgroundService的缺点
缺点 |
---|
不适合占用资源多的后台任务 |
不适合实现太多的后台任务(可能会影响性能) |
Web应用水平扩展时会遇到幂等性问题 |
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术