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 】


相关推荐: 《优志愿》修改手机号方法  泰拉瑞亚水晶无法放置问题  创客贴登录页面入口 创客贴网页版最新网址链接  VB表达式书写规则解析  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  纯CSS实现自适应宽度与响应式布局的水平按钮组  WPS文字如何进行简繁转换  《合金装备4》有望推出重制版!制作人发话了  《理想汽车》权限管理设置方法  XPath动态元素定位:如何精准选择文本内容变化的元素  百度网盘如何设置上传限额  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  《撕歌》会员开通方法  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  j*a中ArrayBlockingQueue的使用  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  MacBook Pro词典使用指南  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  喜茶GO更换登录账号方法  优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理  《爱笔思画x》魔棒工具抠图教程  @Team是什么?揭秘团队含义  响应式设计中动态背景颜色条的实现指南  TikTok视频播放中断怎么办 TikTok播放异常修复方法  大众点评了却看不到是怎么回事  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  《虎扑》取消评分记录方法  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法  重返未来:1999卡戎全方位攻略  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  QQ网页版入口导航 QQ网页版在线访问通道  Flexbox布局:实现粘性导航与底部页脚的完美结合  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  支付宝网页版在线入口 支付宝官网电脑登录入口  J*aScript包管理器_Npm与Yarn对比  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧  Safari浏览器自动填表功能失效怎么办 Safari表单管理修复  追剧达人如何发弹幕  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  在Dash应用中自定义HTML标题和网站图标  《幻兽帕鲁》手游帕鲁捕捉技巧分享  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局 

 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.