C# IHostedService的用法 - 在ASP.NET Core中运行后台任务


IHostedService是ASP.NET Core中用于托管长时间运行后台任务的接口,含StartAsync(启动时执行)和StopAsync(关闭时优雅停止)方法;可通过实现该接口或继承BackgroundService(提供ExecuteAsync抽象方法)来创建定时任务、消息队列处理等服务,并需用AddHostedService注册以确保生命周期由主机管理。

c# ihostedservice的用法 - 在asp.net core中运行后台任务

在 ASP.NET Core 中,如果需要运行长时间运行的后台任务,比如定时处理数据、轮询数据库、发送邮件或维护缓存,IHostedService 是一个非常合适的选择。它允许你在应用启动和关闭时执行自定义逻辑,非常适合托管后台服务。

什么是 IHostedService?

IHostedService 是一个接口,包含两个方法:

  • StartAsync(CancellationToken cancellationToken):在应用启动后调用,用于开始后台任务。
  • StopAsync(CancellationToken cancellationToken):在应用关闭时调用,用于优雅地停止任务。

你只需实现这个接口,将你的后台逻辑放入其中,ASP.NET Core 会自动管理它的生命周期。

如何使用 IHostedService?

以一个简单的定时任务为例,每 10 秒打印一条日志。

  1. 创建一个类实现 IHostedService:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

public class TimedHostedService : IHostedService
{
    private readonly ILogger<TimedHostedService> _logger;
    private Timer? _timer;

    public TimedHostedService(ILogger<TimedHostedService> logger)
    {
        _logger = logger;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Timed Hosted Service is starting.");

        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));

        return Task.CompletedTask;
    }

    private void DoWork(object? state)
    {
        if (!_timer!.Disposed)
        {
            _logger.LogInformation("Timed Hosted Service is working. Time: {Time}", DateTime.Now);
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Timed Hosted Service is stopping.");

        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }
}
  1. 在 Program.cs 中注册服务:
var builder = WebApplication.CreateBuilder(args);

// 添加 Hosted Service
builder.Services.AddHostedService<TimedHostedService>();

var app = builder.Build();

app.Run();

这样,当应用启动时,StartAsync 被调用,定时器开始工作;关闭时,StopAsync 确保定时器被正确释放。

更复杂的场景:使用 BackgroundService

直接实现 IHostedService 对于复杂任务可能不够方便。ASP.NET Core 提供了抽象类 BackgroundService,更适合长时间运行的任务,比如从队列中消费消息。

Android服务Service_详解 WORD版 Android服务Service_详解 WORD版

本文档主要讲述的是Android服务Service_详解;服务(Service)是Android系统中4个应用程序组件之一(其他的组件详见3.2节的内容)。服务主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样可以不影响用户做其他事情。通过AIDL服务可以实现不同进程之间的通信,这也是服务的重要用途之一。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Android服务Service_详解 WORD版 0 查看详情 Android服务Service_详解 WORD版
using Microsoft.Extensions.Hosting;
using System.Threading.Channels;

public class QueuedHostedService : BackgroundService
{
    private readonly ChannelReader<string> _reader;

    public QueuedHostedService(Channel<string> channel)
    {
        _reader = channel.Reader;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await foreach (var message in _reader.ReadAllAsync(stoppingToken))
        {
            Console.WriteLine($"Processing message: {message}");
            await Task.Delay(1000, stoppingToken); // 模拟处理耗时
        }
    }
}

BackgroundService 内部实现了 IHostedService,并提供了一个抽象的 ExecuteAsync 方法,你可以在这里写主循环逻辑,避免手动管理 CancellationToken 和循环。

注册和依赖注入

所有实现 IHostedService 或继承 BackgroundService 的类都会被当作单例处理。它们可以在构造函数中注入任何已注册的服务,如 ILogger、DbContext 或自定义服务。

确保在 builder.Services 中使用 AddHostedService() 注册,而不是普通的 AddSingleton,这样才能由主机正确管理生命周期。

基本上就这些。用好 IHostedService,可以让后台任务与应用共存亡,既可靠又易于维护。

以上就是C# IHostedService的用法 - 在ASP.NET Core中运行后台任务的详细内容,更多请关注其它相关文章!


# 文档  # 航空营销推广  # 为品牌营销推广怎么做  # 长沙seo服务公司  # 刷seo软件下载  # 证券app推广营销  # 辽宁全网整合营销推广  # 行业网站建设方案详细  # 保险行业活动推广营销  # 企业营销推广行业前景  # 网站未备案怎么建设  # 有哪些  # 在这里  # app  # 是一个  # 的是  # 游戏开发  # 启动时  # 自定义  # 长时间  # 你在  # .net  # c#  # microsoft  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 微信客户端如何找回密码_微信客户端忘记密码找回方法  《东方财富》条件单关闭方法  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  纯CSS实现自适应宽度与响应式布局的水平按钮组  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  J*aScript对象中深度嵌套URL键的查找与更新策略  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  抖音号升级企业号怎么改名字?升级企业号有哪些好处?  《画加》约稿流程  《深林》冬季章节图文攻略  windows10怎么开启wsl_windows10安装linux子系统教程  《荔枝fm》导出文件教程  海外搜索引擎推广效果怎么样,怎么分析效果!  《气泡星球》兑换码礼包大全  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  自定义你的VS Code状态栏,监控关键信息  t3出行如何使用微信支付  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  《新三国志曹操传》游历事件袁尚突围攻略  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  风车动漫官网首页入口登录 风车动漫在线观看正版地址  阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口  基于键值条件高效映射 Pandas DataFrame 多列数据  网易云音乐闹钟铃声设置教程  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  在Django单元测试中优雅处理信号:基于环境的条件执行策略  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  花生壳内网映射新方案  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  Win11怎么开启HDR_Windows 11显示器画质增强设置  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  抖音评论无法发送如何修复 抖音评论功能操作指南  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  《长生:天机降世》火塔小怪大全  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  重返未来:1999卡戎全方位攻略  《下一站江湖2》大雪山加入方法  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  《环球网校》设置报考省市方法  追剧达人如何发弹幕  《下一站江湖2》独孤剑诀习得方法  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】 

 2025-12-04

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.