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

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($"后台任务执行时间: {Date
Time.Now}");
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
}2. 将服务注册到依赖注入容器
网亚NET!B2C商城系统
网亚Net!B2C商城系统,是创想商务拥有独立产权自主开发,基于WEB应用的B/S架构B2C网上商城系统,主要面向企业或个人构建单用户商城提供友好的解决方案,最大化满足客户目前及今后的独立商城应用需求。该系统运行于微软公司的.NET 平台,采用ASP.NET 3.x技术进行分层开发。特色功能如下1、一键式的在线安装操作;2、完善的标签模板技术;3、静态HTML页面生成;4、自主SEO优化推广;5、
0
查看详情
在 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是什么?如何创建在后台运行的服务?的详细内容,更多请关注其它相关文章!
# 是一个
# 海宁网站建设推广
# 简单网站建设搭建方案范文
# 怒江网站推广网络营销
# 优化seo手段
# 营销推广创新形式怎么写
# 华夏会计网站建设大学
# 怎么做英文网站优化软件
# 汉阳企业网站优化推广公司
# 如何创建搜索推广网站
# 富阳区网站建设厂家
# 多个
# 迭代
# c#
# 应用程序
# 微软公司
# 最佳选择
# 重写
# 你可以
# 如何使用
# 遍历
# .net
# microsoft
# ai
# app
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
iCloud登录入口网页版 苹果iCloud官网登录
Go语言中的*string:深入理解字符串指针
必由学官网入口 必由学教师登录入口
优化Log4j2控制台输出性能:解决异步日志瓶颈
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
12306选座如何查看座位示意图_12306座位示意图解读与使用
解决移动端滚动问题的overflow属性应用指南
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
《噬血代码2》新预告片发布 展示游戏剧情
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
在WordPress中通过REST API获取BasicAuth保护的远程文章
163邮箱官方主页登录 直达网易邮箱登录核心页面
学习通在线学习平台 学习通网页版直接进入课程中心
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
qq游戏大厅官方下载_qq游戏免费下载安装入口
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
如何使用Go和Martini动态服务解码后的图片
AO3同人作品网入口 AO3搜索引擎官网永久地址
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
深入理解J*a链表中的IPosition接口与使用
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
必由学官方平台入口 必由学在线课堂登录地址
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
Go语言JSON解析深度指南:动态访问与结构体映射实践
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项
微博网页版官方账号登录 微博网页版内容浏览使用指南
Golang指针如何与map组合使用_Golang map指针组合实践
提升Kafka消费者健壮性:会话超时处理与消息处理语义
Python实现多节点属性重叠度分析教程
QQ官网正版登录链接 QQ在线登录入口最新
ACG动漫视频网入口 ACG动漫*免费正版观看地址
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
Flexbox布局实践:实现粘性导航栏与底部固定页脚
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
excel怎么制作工资条 excel快速生成工资条的方法
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
谷歌推RCS信息存档功能:公司可监控员工私密信息!


2025-11-22
浏览次数:次
返回列表
Time.Now}");
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
}