
.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 和控制台应用中,它都能轻松注册并运行。这使得开发者的工作更加高效,也简化了日志管理和资源释放的逻辑。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月28日 13时43分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java基础编程
2019-03-15
STS 的共享内存过程(待充分理解)
2019-03-15
CreatePointFont使用方法
2019-03-15
No qualifying bean of type 解决办法(总结全网)
2019-03-15
vue使用tinymce5富文本编辑器
2019-03-15
VsCode配置c运行环境
2019-03-15
Stream 某些API
2019-03-15
IDEA如何设置打开多个文件时分行显示
2019-03-15
Face++
2019-03-15
1.RESTFUL
2019-03-15
关于项目中 对Java 的为空判断整理
2019-03-15