dot net core使用BackgroundService运行一个后台服务
不管是在控制台程序还是asp.net core
程序中,我们经常会有用到一个需要长时间运行的后台任务的需求。通常最直觉的方式是使用Thread
实例来新建一个线程,但是这样需要自行管理线程的启动和停止。
在.net core
中提供了一个继承自IHostedService
的基类BackgroudService
能够方便地实现一个长程的后台任务。
为了使用这个基类进行开发,我们需要向项目中添加包:Microsoft.Extensions.Hosting
然后新建一个后台任务类AppHostedService
并实现ExecuteAsync
方法即可。
一个简单的ExecuteAsync
任务实现
protected override async Task<object> ExecuteAsync(CancellationToken stoppingToken)
{
int loop = 0;
while (!stoppingToken.IsCancellationRequested) {
try {
Console.WriteLine("Backgroun service working...");
await Task.Delay(5000, stoppingToken);
} catch(TaskCanceledException exception)
{
Console.WriteLine($"TaskCanceledException Error: {exception.Message}");
}
}
return Task.CompletedTask;
}
另外在主程序中使用Host.CreateDefaultBuilder()
来创建运行程序的托管服务并加入我们刚刚创建的AppHostedService
await Host.CreateDefaultBuilder()
.UseConsoleLifetime()
.ConfigureServices((context, services) => {
services.AddHostedService<AppHostService>();
})
.RunConsoleAsync();
创建完成后编译运行,将看到托管服务的启动输出信息和在任务中周期性输出的信息。完整代码见Gist
Hello, World!
Start Async AppHostService
Backgroun service working...
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Users\ZhouXinfeng\tmp\hostservice\bin\Debug\net8.0
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
Background service working...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!