0

0

.NET中的后台任务(IHostedService)是什么?如何创建一个长时间运行的服务?

小老鼠

小老鼠

发布时间:2025-11-16 15:12:06

|

752人浏览过

|

来源于php中文网

原创

ihostedservice用于在.net应用中运行后台任务,通过实现startasync和stopasync方法管理服务生命周期。示例中创建timedbackgroundservice类,利用timer每10秒执行一次任务,并在program.cs中通过addhostedservice注册。适用于轮询、消息监听等场景,需注意异步处理、取消令牌和异常捕获,确保任务稳定运行。

.net中的后台任务(ihostedservice)是什么?如何创建一个长时间运行的服务?

.NET中的IHostedService是一个用于实现后台任务的接口,允许你在应用程序启动和关闭时运行长时间运行的逻辑。它非常适合处理轮询、消息监听、定时任务或任何需要在应用生命周期内持续运行的操作。

理解 IHostedService 接口

IHostedService定义了两个方法:

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

你可以注册多个实现了该接口的服务,它们会随应用生命周期自动管理。

创建一个长时间运行的后台服务

下面是一个简单的示例,展示如何创建一个每10秒打印当前时间的后台服务。

1. 创建后台服务类

新建一个类,例如 TimedBackgroundService,并实现 IHostedService

PDFlux
PDFlux

PDF内容提取+智能问答神器,结合了科研级精准的非结构化文档解析能力,以及ChatGPT的智能问答能力。

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

public class TimedBackgroundService : IHostedService, IDisposable
{
    private Timer? _timer;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        // 启动定时器,每10秒执行一次
        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
        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;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

2. 在 Program.cs 中注册服务

在 .NET 6+ 的最小API项目中,你需要将服务添加到依赖注入容器:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

app.Run();

如果你使用的是传统的 ASP.NET Core 项目结构(Startup.cs),则在 ConfigureServices 方法中添加:

```csharp services.AddHostedService(); ```

常见应用场景与注意事项

这种模式适用于以下场景:

  • 定期从数据库拉取待处理任务
  • 监听消息队列(如 RabbitMQ、Kafka)
  • 定时清理缓存或日志文件
  • 保持与外部系统的长连接

注意点:

  • 避免在 StartAsync 中阻塞线程,应使用异步或定时器机制。
  • 始终处理取消令牌(CancellationToken),确保能优雅退出。
  • 异常未捕获可能导致服务终止,建议在循环或回调中添加 try-catch。
  • 若需更精确的调度,可结合 PeriodicTimer 或第三方库如 Hangfire。

基本上就这些。IHostedService 提供了一种标准方式来管理后台任务,集成简单且生命周期受控。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

206

2024.02.23

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

47

2026.01.28

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

156

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

206

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

122

2026.02.04

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1774

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

570

2025.10.17

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 76.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号