BackgroundService 后台服务
BackgroundService 是 .NET Core 写后台任务的基类,适合做定时任务、后台 worker。用 PeriodicTimer 做定时循环,比 Thread.Sleep 优雅,能响应取消。
自己写定时清理任务就是用这个模式。关键是 ExecuteAsync 要支持 CancellationToken,服务停止时能优雅退出。
注意事项:1) 在 Program.cs 里 AddHostedService<T>() 注册;2) 长时间操作要传 CancellationToken;3) 不要在构造函数里做耗时操作。
代码示例
public class CleanupJob : BackgroundService
{
private readonly ILogger<CleanupJob> _logger;
public CleanupJob(ILogger<CleanupJob> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
using var timer = new PeriodicTimer(TimeSpan.FromMinutes(5));
while (await timer.WaitForNextTickAsync(stoppingToken))
{
try
{
_logger.LogInformation("开始清理过期数据");
// 清理逻辑...
await Task.Delay(1000, stoppingToken); // 模拟工作
_logger.LogInformation("清理完成");
}
catch (OperationCanceledException) { throw; }
catch (Exception ex)
{
_logger.LogError(ex, "清理失败");
}
}
}
}
// Program.cs 注册
builder.Services.AddHostedService<CleanupJob>();
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。