使用 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($"后台任务执行时间: {DateTime.Now}"); } public Task StopAsync(CancellationToken cancellationToken) { _timer?.Change(Timeout.Infinite, 0); return Task.CompletedTask; }}
2. 将服务注册到依赖注入容器
在 Program.cs 或 Startup.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 中阻塞主线程,应使用 Timer 或 Task.Run 启动异步操作。务必监听 CancellationToken,确保应用关闭时能及时停止任务。多个 IHostedService 按注册顺序启动,反向停止。若任务失败且未捕获异常,可能导致应用崩溃,建议内部做好异常处理。
基本上就这些。通过 IHostedService 或 BackgroundService,你可以轻松在 .NET 应用中集成后台任务,无需额外线程管理,且与应用生命周期一致。
以上就是C#的IHostedService是什么?如何创建在后台运行的服务?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442048.html
微信扫一扫
支付宝扫一扫