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来创建短生命周期的服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值