.NET Core 基於 IHostedService 實現後臺定時任務
阿新 • • 發佈:2021-09-22
.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>();