分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

.NET Core 中基于 IHostedService 实现后台定时任务

发布时间:2023-09-06 02:14责任编辑:蔡小小关键词:.NET

.NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中分别用 Web 与 Console 程序体验一下。

首先继承 BackgroundService 实现一个 TimedBackgroundService

public 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 即可:

public void ConfigureServices(IServiceCollection services){ ???services.AddHostedService<TimedBackgroundService>();}

然后只要站点启动,就会定时输出日志:

Now listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:48:02info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:48:07info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:48:12

接下来在控制台程序中体验一下。
基于 Generic Host 实现如下的控制台程序,也是执行在 ConfigureServices 中注册一下 TimedBackgroundService 。

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

dotnet run 运行程序后 TimedBackgroundService 定时输出了日志:

info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:59:37info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:59:42info: BackgroundServiceSample.Services.TimedBackgroundService[0] ?????Hello World! - 9/14/2018 17:59:47

体验完成。

.NET Core 中基于 IHostedService 实现后台定时任务

原文地址:https://www.cnblogs.com/dudu/p/9647619.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved