1. 程式人生 > 其它 >.NET Core 基於 IHostedService 實現後臺定時任務

.NET Core 基於 IHostedService 實現後臺定時任務

.NET Core 基於 IHostedService 實現後臺定時任務

迷戀自留地

NET Core 2.0 引入了 IHostedService ,基於它可以很方便地執行後臺任務,.NET Core 2.1 則錦上添花地提供了 IHostedService 的預設實現基類 BackgroundService ,在這篇隨筆中分別用 Web 與 Console 程式體驗一下。

第一步:首先繼承 BackgroundService 實現一個 TimedBackgroundService

 class TimedBackgroundService : BackgroundService
    {
        private readonly ILogger _logger;
        private Timer _timer;

        public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
        {
            _logger = logger;
        }

        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
            return Task.CompletedTask;
        }

        private void DoWork(object state)
        {
            _logger.LogInformation($"Hello World! - {DateTime.Now}");
        }

        public override void Dispose()
        {
            base.Dispose();
            _timer?.Dispose();
        }

    }

第二步:在 ASP.NET Core Web 程式中執行這個後臺定時任務只需在 Startup 的 ConfigureServices 註冊 TimedBackgroundService 即可:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<TimedBackgroundService>();
}

簡單Demo使用

建立TaskAndOrderService 類,繼承 : BackgroundService ,實現介面

/// <summary>
    /// 任務訂單處理自動開始結束
    /// </summary>
    public class TaskAndOrderService : BackgroundService
    {

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
           
            while (!stoppingToken.IsCancellationRequested)
            {
                 //doto (處理業務)
                 Console.WriteLine($"{DateTime.Now}-你好");
           
                await Task.Delay(5000, stoppingToken);
            }
        }

    }

然後在server中註冊

 //設定任務自動開始後者任務結束
            services.AddHostedService<TaskAndOrderService>();