在.NET中,Worker Service是一种用于构建长时间运行的后台服务的项目模板,非常适合实现定时任务。它基于托管模型,不依赖HTTP请求,可以部署为Windows服务或Linux守护进程。

创建Worker Service项目
可以使用命令行或者Visual Studio创建项目。命令行方式如下:
dotnet new worker -n MyTimerWorker cd MyTimerWorker dotnet run
上述命令会生成一个包含Program.cs和Worker.cs的基础项目结构。
编写定时任务逻辑
在Worker类中,我们可以使用System.Timers.Timer来实现周期性执行。下面的代码展示了如何每五秒执行一次后台任务:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private Timer _timer;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
// 服务启动时调用
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
// 创建定时器,间隔5秒,不立即执行
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
// 定时执行的方法
private void DoWork(object state)
{
_logger.LogInformation("后台定时任务执行于: {time}", DateTimeOffset.Now);
}
// 服务停止时释放资源
public override void Dispose()
{
_timer?.Dispose();
base.Dispose();
}
}在代码中,BackgroundService基类提供了后台服务的标准生命周期。ExecuteAsync方法中创建Timer并指定回调方法DoWork,即可实现定时触发。
配置Program类
默认的Program.cs已经帮我们注册了Worker服务,核心代码如下:
using Microsoft.Extensions.Hosting;
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.Build()
.Run();通过AddHostedService方法,我们把Worker注册为托管后台服务,应用启动后会自动运行。
部署与运行
开发完成后,可以使用以下命令发布为独立程序:
dotnet publish -c Release -o ./publish
若需要部署为Windows服务,可添加Microsoft.Extensions.Hosting.WindowsServices包,并在Program中调用UseWindowsService。Linux下则可借助systemd托管。
注意事项
- 定时任务中应避免阻塞线程,耗时操作建议使用异步方法。
- 如果任务执行时间可能超过定时间隔,需在方法内做重入控制。
- 使用ILogger记录运行信息,便于后期排查问题。
通过以上步骤,你就可以在.NET中快速创建一个稳定的后台定时任务Worker Service,并根据业务需要调整执行频率与逻辑。
.NETWorker_Service定时任务修改时间:2026-07-29 18:27:18