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. 将服务注册到依赖注入容器

Program.csStartup.cs 中将你的服务添加为托管服务:

var builder = WebApplication.CreateBuilder(args);// 添加后台服务builder.Services.AddHostedService();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);        }    }}

同样需要注册:

“`csharpbuilder.Services.AddHostedService();“`

常见用途和注意事项

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 18:41:03
下一篇 2025年12月17日 18:41:17

相关推荐

发表回复

登录后才能评论
关注微信