Loading... # .NET Core 基于 IHostedService 实现后台定时任务 [迷恋自留地](https://hunji.xyz/) NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中分别用 Web 与 Console 程序体验一下。 ### 第一步:首先继承 BackgroundService 实现一个 TimedBackgroundService ```csharp 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 即可: ```csharp public void ConfigureServices(IServiceCollection services) { services.AddHostedService<TimedBackgroundService>(); } ``` ## 简单Demo使用 创建`TaskAndOrderService` 类,继承 `: BackgroundService` ,实现接口 ```csharp /// <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中注册 ```csharp //设置任务自动开始后者任务结束 services.AddHostedService<TaskAndOrderService>(); ``` ![](https://img-blog.csdnimg.cn/ff578b0522264e0ea721dbc92eeae656.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L-35oGL6Ieq55WZ5Zyw,size_9,color_FFFFFF,t_70,g_se,x_16) ![我的公众号](https://img-blog.csdnimg.cn/20210517111144223.png) 最后修改:2021 年 09 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏