.NET Core 中基于 IHostedService 实现后台定时任务
发布日期:2021-05-28 16:27:04 浏览次数:35 分类:精选文章

本文共 2193 字,大约阅读时间需要 7 分钟。

.NET Core 2.1 的 BackgroundService:实现优雅的后台定时任务

.NET Core 2.0 时引入了 IHostedService,它为执行后台任务提供了强大的工具。随着.NET Core 2.1 的发布,BackgroundService 的出现使开发者能够更加轻松地实现后台定时任务。本文将通过 Web 应用和 Console 程序的实践案例,展示如何利用 BackgroundService 实现定时任务。

从代码到应用:实现定时任务

首先,开发者需要继承 BackgroundService,并在其基础上进行定制。在本文中,我们设计了 TimedBackgroundService 类。该类通过 Timer 实现每五秒一次的定时操作。关键步骤如下:

public 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 应用中注册服务

在 ASP.NET Core Web 项目中,将定时服务注册到 Dependency Injection 中。只需在 ConfigureServices 方法中添加服务即可:

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

启动应用后,BackgroundService 将自动执行定时任务,日志将定期输出 "Hello World!"。预期输出如下:

Now listening on: http://localhost:5000  
Application started. Press Ctrl+C to shut down.
info: Hello World! - 9/14/2023 12:34:56
info: Hello World! - 9/14/2023 12:34:61
info: Hello World! - 9/14/2023 12:34:66

控制台程序实践:简化的实现

为了演示 BackgroundService 的灵活性,我们可以创建一个简单的控制台程序。基于 Generic Host 的实现,代码如下:

class Program  
{
public static async Task Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureLogging(logging => logging.AddConsole())
.ConfigureServices((hostContext, services) =>
services.AddHostedService
();
await builder.RunConsoleAsync();
}
}

运行上述代码后,控制台会持续输出定时日志:

info: Hello World! - 9/14/2023 13:00:00  
info: Hello World! - 9/14/2023 13:00:05
info: Hello World! - 9/14/2023 13:00:10

总结

通过以上实践,可以发现 BackgroundService 提供了一种强大而优雅的方式来实现后台定时任务。在 ASP.NET Core 和控制台应用中,它都能轻松注册并运行。这使得开发者的工作更加高效,也简化了日志管理和资源释放的逻辑。

上一篇:AcWing 878 线性同余方程
下一篇:AcWing 876 快速幂求逆元

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月28日 13时43分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章