ASP.NET Core 的 BackgroundService

说明#

托管服务的使用非常简单,只要编写一个实现了IHostedService接口的类即可。
一般情况下我们编写从BackgroundService类继承的类,因为BackgroundService实现了IHostedService接口,
并且帮我们处理了任务的取消等逻辑。
我们只要实现BackgroundService类中定义的抽象方法ExecuteAsync,
在ExecuteAsync方法中编写后台执行的代码即可。BackgroundService类实现了IDisposable接口,
我们可以把任务结束后的清理代码写到Dispose方法中。
托管服务会随着应用程序启动,当然,托管服务是在后台运行的,不会阻塞ASP.NET Core中其他程序的运行。

编写托管服务#

namespace bgServiceTest
{
    public class DemoBgService : BackgroundService
    {
        private ILogger<DemoBgService> logger;

        public DemoBgService(ILogger<DemoBgService> logger)
        {
            this.logger = logger;
        }

        /// <summary>
        /// 任务的代码
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while(true)
            {
                string randomString = "Abc" + Guid.NewGuid().ToString();
                Console.WriteLine(randomString);
                await Task.Delay(1000);
                logger.LogInformation(randomString);
            }
        }

        /// <summary>
        /// 清理工作
        /// </summary>
        public override void Dispose()
        {
            //清理工作
            //...

            base.Dispose();
        }
    }
}

注册托管服务#

services.AddHostedService<DemoBgService>();

托管服务中使用依赖注入注意事项#

托管服务是以单例的生命周期注册到依赖注入容器中的。
按照依赖注入容器的要求,长生命周期的服务不能依赖短生命周期的服务,
因此我们可以在托管服务中通过构造方法注入其他生命周期为单例的服务,
但是不能注入生命周期为范围或者瞬态的服务。
我们可以通过构造方法注入IServiceScopeFactory服务,
它可以用来创建IServiceScope对象,
这样我们就可以通过IServiceScope来创建短生命周期的服务了。

作者:重庆熊猫

出处:https://www.cnblogs.com/cqpanda/p/17012188.html

版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。

posted @   重庆熊猫  阅读(1116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示