NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中用 Web 体验一下。 第一步:首先继承 BackgroundService 实现一个 TimedBackgroundService class TimedBackgroundService : BackgroundService { private readonly ILogger _logger; private Timer _timer; public TimedBackgroundService(ILogger 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();}
简单Demo使用创建
TaskAndOrderService
类,继承
: BackgroundService
,实现接口
/// /// 任务订单处理自动开始结束 /// 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();