.NET Core 基于 IHostedService 实现后台定时任务
# .NET Core 基于 IHostedService 实现后台定时任务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://hunji.xyz/archives/87.html 我还以为是framework,结果是asp。 你直接创建一个worker service就是这玩意儿。 学习学习 jy04468108 发表于 2021-9-22 20:32
我还以为是framework,结果是asp。
NET 5好吧 goldli 发表于 2021-9-22 22:47
你直接创建一个worker service就是这玩意儿。
方法多种多样
页:
[1]