首页 > 编程语言 >ASP.NET Core 的 BackgroundService

ASP.NET Core 的 BackgroundService

时间:2022-12-30 09:22:13浏览次数:33  
标签:Core ASP 服务 托管 BackgroundService 生命周期 NET logger 注入

说明

托管服务的使用非常简单,只要编写一个实现了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来创建短生命周期的服务了。

标签:Core,ASP,服务,托管,BackgroundService,生命周期,NET,logger,注入
From: https://www.cnblogs.com/cqpanda/p/17012188.html

相关文章

  • 启动Java项目报错Problematic frame:Failed to write core dump. Minidumps are not e
    ❗Problematicframe:有问题的框架✔fastjson空指针不能正确抛空指针异常,换成fastjson2即可。AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:EXC......
  • ASP.NET期末大作业————图片管理系统
    项目描述:本课题研究的主要内容是用户的注册与登陆,用户的授权及用户登录后的图片管理界面,包括:图片上传;图片审核;图片入库;图片检索;图片浏览及下载等。开发语言: Asp.net技术......
  • VS2022支持.NET Framework4.0的解决方法
    问题描述VS2022打开的项目提示:找不到.NETFramework,Version=v4.0的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。原......
  • EFCore——树形结构篇
    1、整体数据量不大的场景参照:EntityFrameworkLinq查询数据获得树形结构-YES开发框架网(yesdotnet.com)核心方法GetChildData,特点将所有的数据查到内存中,利用递归去组......
  • CentOS7开启telnet服务端,配合进行ssh升级
    默认情况下,linux’操作系统我们都是通过ssh进行远程操作,开启telnet一般是在升级ssh的时候需要,开启telnet是为了防止升级ssh之后,无法通过ssh登录系统,可用telnet登录。1.......
  • API对象--Daemonset(chrono《kubernetes入门实战课》笔记整理)
    【概念介绍】学习了监管离线任务的API对象job/cronjob,监管在线任务的API对象deployment。今天学习做好守护任务的API对象DaemonSet。它会在Kubernetes集群的每个节点上......
  • Kubernetes(k8s) kubectl auth常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • ASP.NET网站设计
    ASP.NET网站设计  Model→View数据传递方式数据从Controller传递到View的方法l 使用ViewData;l 使用ViewBag;l 使用强类型模型对象,也称为强类型视图; ......
  • netstat -st输出解析
    转载自:http://perthcharles.github.io/2015/11/10/wiki-netstat-proc/netstat-st输出的两个重要信息来源分别是/proc/net/snmp和/proc/net/netstat本文将分类整理这些co......
  • windows10 安装 IIS 部署 asp.net core项目
     安装IIShttps://blog.csdn.net/qq_39953519/article/details/114371495这里写的比较详情 PublishASP.NetCore6.0MVCtoIISinVisualStudio2022 我按照......