C#的IHostedService是什么?如何创建在后台运行的服务?


使用 IHostedService 创建后台服务需实现接口或继承 BackgroundService 类,1. 实现 StartAsync 和 StopAsync 方法启动和停止任务,2. 在 Program.cs 中通过 AddHostedService 注册服务,推荐继承 BackgroundService 并重写 ExecuteAsync 执行循环逻辑,同时监听 CancellationToken 确保优雅关闭。

c#的ihostedservice是什么?如何创建在后台运行的服务?

IHostedService 是 C# 中用于在 .NET 应用程序(特别是 ASP.NET Core 和泛型主机应用)中运行后台任务的接口。它允许你在应用程序启动后执行长时间运行或周期性执行的操作,比如定时处理数据、轮询数据库、发送邮件、监听消息队列等。

实现 IHostedService 接口后,你的服务会在应用启动时自动开始,并在应用关闭时优雅地停止。

如何使用 IHostedService 创建后台服务?

要创建一个后台运行的服务,你需要:

1. 实现 IHostedService 接口

该接口包含两个方法:

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

下面是一个简单的后台服务示例,每 5 秒打印一次时间:

using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;

public class MyBackgroundService : IHostedService
{
    private Timer? _timer;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
        return Task.CompletedTask;
    }

    private void DoWork(object? state)
    {
        // 避免在取消令牌已触发时继续执行
        Console.WriteLine($"后台任务执行时间: {DateTime.Now}");
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _timer?.Change(Timeout.Infinite, 0);
        return Task.CompletedTask;
    }
}

2. 将服务注册到依赖注入容器

牛NIUCMS本地O2O系统 牛NIUCMS本地O2O系统

牛NIUCMS本地O2O系统是一个以php+mysql进行开发的o2o网站系统。NIUCMS是一款强大的网站管理系统。支持智慧城市、智慧小区、智慧乡村、本地生活门户、本地O2O平台的构建。请注意以下几点:1、这套源码必须要服务器支持伪静态,是支持.htaccess规则的伪静态,一般Apache服务器支持,别搞的下载回去以后说什么缺 少文件,其实源码并非缺少文件。2、这套源码请在php 5.4环境下

牛NIUCMS本地O2O系统 0 查看详情 牛NIUCMS本地O2O系统

在 Program.cs 或 Startup.cs 中将你的服务添加为托管服务:

var builder = WebApplication.CreateBuilder(args);

// 添加后台服务
builder.Services.AddHostedService<MyBackgroundService>();

var app = builder.Build();
app.Run();

更推荐的方式:继承 BackgroundService 类

.NET 提供了一个抽象类 BackgroundService,它是 IHostedService 的实现,更适合复杂的异步后台任务。

它提供了一个虚方法 ExecuteAsync,你可以重写它来定义主逻辑。

using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;

public class TimedBackgroundService : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            // 执行任务
            Console.WriteLine($"定时任务执行: {DateTime.Now}");

            // 等待 5 秒,期间可被取消
            await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
        }
    }
}

同样需要注册:

```csharp builder.Services.AddHostedService(); ```

常见用途和注意事项

  • 适合运行轻量级、长期存在的任务,如监控、定时同步、消息消费等。
  • 避免在 StartAsync 中阻塞主线程,应使用 Timer 或 Task.Run 启动异步操作。
  • 务必监听 CancellationToken,确保应用关闭时能及时停止任务。
  • 多个 IHostedService 按注册顺序启动,反向停止。
  • 若任务失败且未捕获异常,可能导致应用崩溃,建议内部做好异常处理。

基本上就这些。通过 IHostedService 或 BackgroundService,你可以轻松在 .NET 应用中集成后台任务,无需额外线程管理,且与应用生命周期一致。

以上就是C#的IHostedService是什么?如何创建在后台运行的服务?的详细内容,更多请关注其它相关文章!


# c#  # app  # 惠州网站优化电话多少  # 阜阳企业网站建设  # 辽源快照seo优化  # 泰州推广互联网营销公司  # 吴忠seo公司找9火星  # 双语网站建设开发  # 多个  # 应用程序  # 开源  # 如何处理  # 这套  # 重写  # 你可以  # 如何使用  # 是一个  # 死锁  # .net  # microsoft  # ai  # 抖音推广代理商的营销  # 乐安网站建设价格  # 闵行区广告营销推广中心  # 长兴县营销活动推广 


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


相关推荐: C++如何实现单例模式_C++线程安全的单例模式写法  mysql如何管理数据库账户_mysql数据库账户管理技巧  J*aScript模块加载器_RequireJS原理分析  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  使用jQuery精确检测除指定元素外任意位置的点击事件  Apple Music无故扣费引质疑  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  繁花漫画使用教程  蜻蜓FM如何设置移动流量播放  《画加》约稿流程  网易云音乐闹钟铃声设置教程  iSpring三分屏制作教程  汽水音乐在线入口 汽水音乐网页端官方页面快速打开  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  如何取消数字签名  海外搜索引擎推广效果怎么样,怎么分析效果!  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  VS Code如何设置默认配置  《雷电模拟器》自动点击设置方法  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  快递查询,一键速查  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  Go反射进阶:访问内嵌结构体中的被遮蔽方法  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  《大润发优鲜》充值方法介绍  在PHP环境中正确加载HTML资源:CSS样式与图片路径指南  iPhone12是否要更新ios16  Mac hosts文件在哪里_Mac修改hosts文件详细教程  百度网盘网页入口链接分享 百度网盘官网入口网页登录  《kimi智能助手》制作ppt教程  AO3官方镜像链接 | 最新防走失网址永久收藏  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  WooCommerce 新客户订单自动添加管理员备注教程  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  J*a中导出MySQL表为SQL脚本的两种方法  《百果园》充值余额方法  在VS Code中进行数据科学和机器学习开发  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  Python测试中模块导入路径解析的最佳实践  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  批改网网页版登录 批改网电脑版学生登录入口  金牛福袋获取攻略  Python实时数据流中高效查找最大最小值  PDF如何批量加注释_PDF多文件批注高亮操作教程  优化 React onClick 事件处理:函数引用与箭头函数的对比  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  服装短视频如何起号推广?服装短视频起号推广有什么要求? 

 2025-11-22

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

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

点击免费数据支持

提交您的需求,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.