首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET 8 中的 Worker Service用法

.NET 8 中的 Worker Service用法

原创
作者头像
软件架构师Michael
发布2025-08-21 15:35:27
发布2025-08-21 15:35:27
1890
举报

Worker Service 是一种用于构建长时间运行的后台服务的模板,适用于处理定时任务、队列消息、数据聚合等场景。它基于 IHostedService 接口,提供跨平台支持,并集成了依赖注入(DI)、日志记录和配置功能。

创建 Worker Service 项目

通过命令 dotnet new worker -n "MyWorkerService" 或在 Visual Studio 中选择 Worker Service 模板即可创建项目。项目包含以下核心文件:

  • Program.cs:入口点,配置并运行宿主(Host)。
  • Worker.cs:继承自 BackgroundService,实现 ExecuteAsync 方法以定义后台任务逻辑。
  • appsettings.json:用于配置日志记录等应用设置。

示例代码展示了如何在 Program.cs 中注册 Worker 服务:

代码语言:csharp
复制
Host.CreateDefaultBuilder(args)
   .ConfigureServices(services =>
   {
       services.AddHostedService<Worker>();
   })
   .Build()
   .Run();

Worker 类实现

Worker 类继承自 BackgroundService,需要重写 ExecuteAsync 方法以定义服务逻辑。以下是一个简单的实现:

代码语言:csharp
复制
public class Worker : BackgroundService
{
   private readonly ILogger<Worker> _logger;
   public Worker(ILogger<Worker> logger)
   {
       _logger = logger;
   }
   protected override async Task ExecuteAsync(CancellationToken stoppingToken)
   {
       while (!stoppingToken.IsCancellationRequested)
       {
           _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
           await Task.Delay(1000, stoppingToken);
       }
   }
}

部署为 Windows 服务或 Linux 守护程序

部署为 Windows 服务

  • 添加 NuGet 包 Microsoft.Extensions.Hosting.WindowsServices
  • Program.cs 中调用 UseWindowsService()
代码语言:txt
复制
Host.CreateDefaultBuilder(args)
   .UseWindowsService()
   .ConfigureServices(services =>
   {
       services.AddHostedService<Worker>();
   });

  • 使用 dotnet publish 发布项目,并通过 sc.exe 命令创建 Windows 服务。

部署为 Linux 守护程序

  • 添加 NuGet 包 Microsoft.Extensions.Hosting.Systemd
  • Program.cs 中调用 UseSystemd()
代码语言:csharp
复制
Host.CreateDefaultBuilder(args)
   .UseSystemd()
   .ConfigureServices(services =>
   {
       services.AddHostedService<Worker>();
   });

多 Worker 类支持

可以在一个项目中定义多个 Worker 类,并在 Program.cs 中分别注册:

代码语言:csharp
复制
services.AddHostedService<WorkerOne>();
services.AddHostedService<WorkerTwo>();

每个 Worker 类独立运行,适合处理不同的后台任务。

注意事项

  • 异步操作:避免在 ExecuteAsync 中使用阻塞操作(如 Thread.Sleep),应使用异步方法(如 Task.Delay)。
  • 生命周期管理:在 StopAsyncExecuteAsyncfinally 块中处理资源释放逻辑。
  • 短生命周期服务:对于一次性任务,可在任务完成后调用 IHostApplicationLifetime.StopApplication() 停止宿主。

Worker Service 是构建后台任务和微服务的理想选择,结合 .NET 的依赖注入和日志功能,可以快速开发高效的长时间运行服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档