如何在.NET中创建一个后台定时任务Worker Service

来源:个人站长作者:樱由罗头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何在.NET中创建一个后台定时任务Worker Service》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在.NET中创建一个后台定时任务Worker Service》有用,将其分享出去将是对创作者最好的鼓励。

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

如何在.NET中创建一个后台定时任务Worker Service

创建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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。