翼度科技»论坛 编程开发 .net 查看内容

.net实现后台服务就这么简单,只要实现IHostedService接口就行了

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
 
IHostedService 接口在.NET Core中的主要用途是定义应用程序生命周期内运行的后台服务。这些服务可以执行初始化、长时间运行的任务、定期运行的任务等。通过实例,我们可以演示如何使用 IHostedService 来实现一个简单的网络检测服务,并记录日志。
首先,我们需要创建一个实现 IHostedService 接口的类。在这个类中,我们将使用 HttpClient 定期检测网络是否正常,并通过 ILogger 记录日志。
  1. using System;
  2. using System.Net.Http;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using Microsoft.Extensions.Hosting;
  6. using Microsoft.Extensions.Logging;
  7. public class NetworkStatusService : IHostedService, IDisposable
  8. {
  9.     private readonly ILogger<NetworkStatusService> _logger;
  10.     private readonly HttpClient _httpClient;
  11.     private Timer _timer;
  12.     public NetworkStatusService(ILogger<NetworkStatusService> logger)
  13.     {
  14.         _logger = logger ?? throw new ArgumentNullException(nameof(logger));
  15.         _httpClient = new HttpClient();
  16.     }
  17.     public Task StartAsync(CancellationToken cancellationToken)
  18.     {
  19.         _logger.LogInformation("NetworkStatusService 正在启动.");
  20.         // 使用 Timer 定期执行网络检测任务
  21.         _timer = new Timer(CheckNetworkStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
  22.         return Task.CompletedTask;
  23.     }
  24.     private async void CheckNetworkStatus(object state)
  25.     {
  26.         try
  27.         {
  28.             // 这里可以替换成实际的网络检测逻辑
  29.             var response = await _httpClient.GetAsync("https://www.example.com");
  30.             if (response.IsSuccessStatusCode)
  31.             {
  32.                 _logger.LogInformation("网络正常.");
  33.             }
  34.             else
  35.             {
  36.                 _logger.LogWarning("网络异常. HTTP 状态码: {StatusCode}", (int)response.StatusCode);
  37.             }
  38.         }
  39.         catch (Exception ex)
  40.         {
  41.             _logger.LogError(ex, "网络检测时发生错误.");
  42.         }
  43.     }
  44.     public Task StopAsync(CancellationToken cancellationToken)
  45.     {
  46.         _logger.LogInformation("NetworkStatusService 正在停止.");
  47.         // 在这里执行清理逻辑,停止长时间运行的任务
  48.         _timer?.Change(Timeout.Infinite, 0);
  49.         return Task.CompletedTask;
  50.     }
  51.     public void Dispose()
  52.     {
  53.         // 释放资源
  54.         _httpClient.Dispose();
  55.         _timer?.Dispose();
  56.     }
  57. }
复制代码
接下来,我们需要在 Startup.cs 文件中注册这个服务:
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Microsoft.Extensions.Hosting;
  3. public class Startup
  4. {
  5.     public void ConfigureServices(IServiceCollection services)
  6.     {
  7.         // 注册 NetworkStatusService
  8.         services.AddHostedService<NetworkStatusService>();
  9.     }
  10. }
复制代码
这个示例中,NetworkStatusService 类会在应用程序启动时开始执行网络检测任务,每隔30秒执行一次。如果网络正常,将会记录信息级别的日志,如果网络异常,则记录警告级别的日志。这样,我们就使用 IHostedService 实现了一个简单的网络检测服务,并通过日志记录器记录相关信息。



来源:https://www.cnblogs.com/hanbing81868164/archive/2023/12/09/17890845.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具