.net实现后台服务就这么简单,只要实现IHostedService接口就行了
  KxE3CZnPt4x3 2023年12月31日 18 0

 

IHostedService 接口在.NET Core中的主要用途是定义应用程序生命周期内运行的后台服务。这些服务可以执行初始化、长时间运行的任务、定期运行的任务等。通过实例,我们可以演示如何使用 IHostedService 来实现一个简单的网络检测服务,并记录日志。

首先,我们需要创建一个实现 IHostedService 接口的类。在这个类中,我们将使用 HttpClient 定期检测网络是否正常,并通过 ILogger 记录日志。

using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class NetworkStatusService : IHostedService, IDisposable
{
    private readonly ILogger<NetworkStatusService> _logger;
    private readonly HttpClient _httpClient;
    private Timer _timer;

    public NetworkStatusService(ILogger<NetworkStatusService> logger)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        _httpClient = new HttpClient();
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("NetworkStatusService 正在启动.");

        // 使用 Timer 定期执行网络检测任务
        _timer = new Timer(CheckNetworkStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));

        return Task.CompletedTask;
    }

    private async void CheckNetworkStatus(object state)
    {
        try
        {
            // 这里可以替换成实际的网络检测逻辑
            var response = await _httpClient.GetAsync("https://www.example.com");

            if (response.IsSuccessStatusCode)
            {
                _logger.LogInformation("网络正常.");
            }
            else
            {
                _logger.LogWarning("网络异常. HTTP 状态码: {StatusCode}", (int)response.StatusCode);
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "网络检测时发生错误.");
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("NetworkStatusService 正在停止.");

        // 在这里执行清理逻辑,停止长时间运行的任务
        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

    public void Dispose()
    {
        // 释放资源
        _httpClient.Dispose();
        _timer?.Dispose();
    }
}

接下来,我们需要在 Startup.cs 文件中注册这个服务:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册 NetworkStatusService
        services.AddHostedService<NetworkStatusService>();
    }
}

这个示例中,NetworkStatusService 类会在应用程序启动时开始执行网络检测任务,每隔30秒执行一次。如果网络正常,将会记录信息级别的日志,如果网络异常,则记录警告级别的日志。这样,我们就使用 IHostedService 实现了一个简单的网络检测服务,并通过日志记录器记录相关信息。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月31日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   69   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   52   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   45   0   0 .NET
  f18CFixvrKz8   2024年05月18日   85   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   77   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   41   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   59   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
KxE3CZnPt4x3