ToB企服应用市场:ToB评测及商务社交产业平台
标题:
.NET 8 中的后台服务:IHostedService 和 BackgroundService
[打印本页]
作者:
万有斥力
时间:
2024-6-20 10:29
标题:
.NET 8 中的后台服务:IHostedService 和 BackgroundService
NET 8 引入了强大的功能,用于使用 和 管理后台使命。这些服务使长时间运行的操作(如计划使命、后台处理和定期维护使命)可以或许无缝集成到您的应用程序中。本文探讨了这些新功能,并提供了实际示例来资助你入门。您可以在我的
GitHub 存储库
中找到这些示例的源代码。IHostedServiceBackgroundService
什么是后台服务?
.NET 中的后台服务允许您在后台独立于主应用程序线程运行使命。这对于需要连续或定期运行而不阻塞主应用程序流的使命至关重要。
IHostedService接口
该接口定义了两种方法:
IHostedService
1 StartAsync(CancellationToken cancellationToken):在应用程序主机启动时调用。
2 StopAsync(CancellationToken cancellationToken):在应用程序主机执行正常关闭时调用。
复制代码
IHostedService
实现示例:
1 using System;
2 using System.Threading;
3 using System.Threading.Tasks;
4 using Microsoft.Extensions.Hosting;
5 using Microsoft.Extensions.Logging;
6
7 public class TimedHostedService : IHostedService, IDisposable
8 {
9 private readonly ILogger<TimedHostedService> _logger;
10 private Timer _timer;
11
12 public TimedHostedService(ILogger<TimedHostedService> logger)
13 {
14 _logger = logger;
15 }
16
17 public Task StartAsync(CancellationToken cancellationToken)
18 {
19 _logger.LogInformation("Timed Hosted Service running.");
20
21 _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
22
23 return Task.CompletedTask;
24 }
25
26 private void DoWork(object state)
27 {
28 _logger.LogInformation("Timed Hosted Service is working.");
29 }
30
31 public Task StopAsync(CancellationToken cancellationToken)
32 {
33 _logger.LogInformation("Timed Hosted Service is stopping.");
34
35 _timer?.Change(Timeout.Infinite, 0);
36
37 return Task.CompletedTask;
38 }
39
40 public void Dispose()
41 {
42 _timer?.Dispose();
43 }
44 }
复制代码
BackgroundServic
e类
该类是一个抽象基类,用于简化后台使命的实现。它提供了一种方法来覆盖:BackgroundService
ExecuteAsync(CancellationToken stoppingToken):包含后台使命的逻辑,并运行到应用程序关闭为止。
BackgroundService 实现示例:
1 using System;
2 using System.Threading;
3 using System.Threading.Tasks;
4 using Microsoft.Extensions.Hosting;
5 using Microsoft.Extensions.Logging;
6
7 public class TimedBackgroundService : BackgroundService
8 {
9 private readonly ILogger<TimedBackgroundService> _logger;
10
11 public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
12 {
13 _logger = logger;
14 }
15
16 protected override async Task ExecuteAsync(CancellationToken stoppingToken)
17 {
18 _logger.LogInformation("Timed Background Service running.");
19
20 while (!stoppingToken.IsCancellationRequested)
21 {
22 _logger.LogInformation("Timed Background Service is working.");
23 await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
24 }
25
26 _logger.LogInformation("Timed Background Service is stopping.");
27 }
28 }
复制代码
主要区别
抽象级别:
IHostedService
:需要手动实现启动和停止逻辑。
BackgroundService
:通过提供具有要重写的单个方法的基类来简化实现。
使用案例:
IHostedService
:适用于需要对服务生命周期举行精致控制的更复杂的方案。
BackgroundService
:非常适合受益于减少样板代码的更简单、长时间运行的使命。
结论
.NET 8 的后台服务(通过 和 )提供了一种可靠且灵活的方式来管理后台使命。通过根据您的需求选择适当的抽象,您可以有用地在应用程序中实现和管理长时间运行的操作。这些新功能增强了创建相应迅速、可伸缩且可维护的 .NET 应用程序的能力。
IHostedService BackgroundService
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4