IHostedService 定义一个长时间运行的服务

IHostedService 是一个 .NET Core 接口,用于定义一个长时间运行的服务,可以在 ASP.NET Core 应用程序中使用。它提供了两个方法:

  1. StartAsync:在应用程序启动时调用,用于启动服务。

  2. StopAsync:在应用程序关闭时调用,用于停止服务。

IHostedService 接口可以用于实现各种后台任务,例如:

  1. 定时任务:使用 Timer 或 CancellationTokenSource 和 Task.Delay 实现。

  2. 后台处理任务:使用 Task.Run 在后台线程中执行长时间运行的代码。

  3. 后台队列任务:使用消息队列实现后台任务的处理。

使用 IHostedService 接口的好处是可以很容易地将后台任务集成到 ASP.NET Core 应用程序中,同时也可以很容易地控制后台任务的启动和停止。

using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Authorization.WebApi
{
    /// 
    /// 官方介绍主要是用来实现实现后台任务
    /// 
    public class BackgroundService : IHostedService, IDisposable
    {
        private readonly ILogger _logger;
        private readonly CancellationTokenSource _cts = new CancellationTokenSource();

        /// 
        /// 构造函数
        /// 
        /// 
        public WpBackgroundService(ILogger logger)
        {
            _logger = logger;
        }

        /// 
        /// 服务开始执行的代码
        /// 
        /// 
        /// 
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _ = DoWorkAsync();
            await Task.CompletedTask;
        }

        /// 
        /// 业务逻辑
        /// 
        /// 
        private async Task DoWorkAsync()
        {
            await Task.Run(async () =>
              {
                  while (!_cts.IsCancellationRequested)
                  {
                      Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                      await Task.Delay(TimeSpan.FromSeconds(5), _cts.Token);
                  }
              }, _cts.Token);
        }

        /// 
        /// 停止
        /// 
        /// 
        /// 
        public async Task StopAsync(CancellationToken cancellationToken)
        {
            _cts.Cancel();
            await Task.CompletedTask;
        }

        /// 
        /// 释放
        /// 
        public void Dispose()
        {
            _cts.Dispose();
        }
    }
}
  1. 在后台任务类中创建一个 CancellationTokenSource 对象,用于取消后台任务。

  2. 在后台任务中使用无限循环,直到 CancellationTokenSource 对象被取消。

  3. 在循环中使用 Task.Delay 方法来等待一定时间间隔,并检查 CancellationTokenSource 是否已被取消。

你可能感兴趣的:(c#)