在现代Web应用程序开发中,我们经常需要执行一些与用户请求无关的后台任务,比如定时发送邮件、清理日志、同步数据等。在 ASP.NET Core 中,微软提供了 IHostedService 接口来帮助开发者轻松实现这类背景任务。本教程将手把手教你如何使用 IHostedService 创建可靠的后台服务,即使你是编程小白也能轻松上手!
IHostedService 是 .NET 提供的一个接口,用于定义在应用程序生命周期内运行的后台服务。这些服务在应用启动时自动启动,在应用关闭时优雅地停止。
通过实现 IHostedService,你可以创建长期运行的任务,而无需依赖外部调度器(如 Windows 任务计划程序),非常适合构建微服务或需要后台处理的 Web 应用。
下面我们以一个每5秒打印当前时间到控制台的简单例子,演示如何实现 IHostedService。
首先,在你的 ASP.NET Core 项目中新建一个类,例如 TimedHostedService.cs:
using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;using System;using System.Threading;using System.Threading.Tasks;public class TimedHostedService : IHostedService, IDisposable{ private readonly ILogger<TimedHostedService> _logger; private Timer? _timer; public TimedHostedService(ILogger<TimedHostedService> logger) { _logger = logger; } public Task StartAsync(CancellationToken stoppingToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer( DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } private void DoWork(object? state) { _logger.LogInformation("Timed Background Service is working. Time: {time}", DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss")); } public Task StopAsync(CancellationToken stoppingToken) { _logger.LogInformation("Timed Background Service is stopping."); _timer?.Change(Timeout.Infinite, 0); return Task.CompletedTask; } public void Dispose() { _timer?.Dispose(); }} 在 Program.cs(.NET 6+)中,将该服务注册为托管服务:
var builder = WebApplication.CreateBuilder(args);// 添加其他服务...// 注册背景任务builder.Services.AddHostedService<TimedHostedService>();var app = builder.Build();// 配置管道...app.Run(); 现在,当你运行应用程序时,控制台会每隔5秒输出一条日志信息,这就是你创建的第一个 C#定时任务!
从 .NET Core 2.1 开始,微软推荐继承 BackgroundService 抽象类,它已经实现了 IHostedService 的大部分逻辑,你只需重写 ExecuteAsync 方法即可。
public class SimpleBackgroundService : BackgroundService{ private readonly ILogger<SimpleBackgroundService> _logger; public SimpleBackgroundService(ILogger<SimpleBackgroundService> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Background task is running at: {time}", DateTimeOffset.Now.ToString("HH:mm:ss")); await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken); } }} 这种方式代码更简洁,且自动处理了取消令牌和异常,是构建 .NET后台服务 的最佳实践。
StopAsync 中优雅关闭,避免资源泄漏。通过 IHostedService 或 BackgroundService,你可以轻松在 ASP.NET Core 应用中实现各种背景任务。无论是简单的定时日志清理,还是复杂的后台数据同步,这套机制都能满足你的需求。希望这篇 IHostedService教程 能帮助你快速上手,构建更强大的 .NET 应用!
关键词回顾:ASP.NET Core背景任务、IHostedService教程、.NET后台服务、C#定时任务
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210721.html