新闻中心

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

2025-11-03
浏览次数:
返回列表
推荐使用 Worker Service 模板结合 IHostedService 与 Timer 实现后台定时任务。1. 创建 Worker Service 项目,生成基础结构;2. 在 Worker 类中重写 ExecuteAsync 方法,通过 Timer 每5分钟执行一次 DoWork 逻辑,并注册取消令牌确保优雅停止;3. 可在构造函数中注入 ILogger、IHttpClientFactory 等服务,实现日志记录或 HTTP 调用;4. 通过 dotnet publish 命令发布为自包含应用,支持部署为 Windows 服务或 Linux systemd 服务。该方式无需界面,适合长时间运行的周期性任务,关键在于避免阻塞主线程并正确处理 CancellationToken。

.net如何创建一个后台定时任务(worker service)

在 .NET 中创建一个后台定时任务,最推荐的方式是使用 Worker Service 模板,并结合 IHostedServiceTimer 实现周期性执行。这种方式适用于不需要用户界面的长时间运行服务,比如定时处理日志、调用 API、清理数据等。

1. 创建 Worker Service 项目

使用命令行或 Visual Studio 创建一个 Worker Service 项目:

dotnet new worker -n MyBackgroundTask

这会生成一个基础的 Worker 项目结构,包含 Program.csWorker.cs

2. 修改 Worker 类实现定时任务

默认的 Worker 类继承自 BackgroundService,我们可以通过重写 ExecuteAsync 方法并使用 Timer 来实现定时逻辑。

示例代码:

using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

public class Worker : BackgroundService
{
    private readonly ILogger _logger;

    public Worker(ILogger logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await Task.Run(() =>
        {
            var timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(5)); // 每5分钟执行一次

            stoppingToken.Register(() => timer?.Change(Timeout.Infinite, 0));
        }, stoppingToken);
    }

    private void DoWork(object state)
    {
        _logger.LogInformation("定时任务正在执行:{time}", DateTime.Now);
        // 在这里添加你的业务逻辑
    }
}

说明:

  • TimeSpan.Zero 表示立即开始第一次执行。
  • TimeSpan.FromMinutes(5) 设置间隔时间为5分钟。
  • stoppingToken.Register 确保服务停止时,定时器也被正确释放。

3. 配置依赖注入和日志(可选)

如果需要在任务中使用数据库、HTTP 客户端或其他服务,可以在构造函数中注入它们。例如:

Tome Tome

先进的AI智能PPT制作工具

Tome 143 查看详情 Tome private readonly IHttpClientFactory _httpClientFactory;

public Worker(ILogger logger, IHttpClientFactory httpClientFactory)
{
    _logger = logger;
    _httpClientFactory = httpClientFactory;
}

确保在 Program.cs 中注册了相关服务,如:

builder.Services.AddHttpClient();

4. 发布和部署

Worker Service 可以作为控制台应用运行,也可以发布为 Windows 服务或 Linux 后台服务(如 systemd)。

发布命令:

dotnet publish -c Release -r win-x64 --self-contained true

生成的可执行文件可以直接运行或注册为系统服务。

基本上就这些。通过 BackgroundService + Timer 的组合,你可以轻松实现一个稳定可靠的后台定时任务。关键是避免阻塞主线程,并正确处理取消令牌。

以上就是.NET如何创建一个后台定时任务(Worker Service)的详细内容,更多请关注其它相关文章!


# 正确处理  # 携程网站流程优化情况  # 青岛知名网站优化平台  # 蓟县网站建设的报价  # 网站如何容易优化  # 沈河区网站建设优化价格  # 海口网络营销推广公司  # 推广营销公司价格  # 水果产品营销推广方案  # 网站规划建设方案怎么写  # 建设网站快不快  # 你可以  # 在这里  # 程序开发  # 后台任务  # 重写  # 仅是  # 数据结构  # 令牌  # 创建一个  # 长时间  # .net  # microsoft  # win  # ai  # windows  # linux 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: AO3官方在线访问地址 Archive of Our Own最新镜像合集  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  批改网学生版PC登录 批改网官网登录系统入口  实现全屏滚动与导航点:专业教程  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  微信网页版扫码登录入口 微信网页版二维码登录入口  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  mc.js游戏直达 mc.js网页免下载版本秒进地址  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  R星幕后开发视频泄露 包含《GTA6》等多款大作  蛙漫2台版漫画地址 Manwa2正版网页版链接  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  J*aScript中针对特定容器内图片动画的实现教程  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置  qq游戏跨平台入口_qq游戏多设备同步登录  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  夸克AO3官网入口_AO3镜像网站2025推荐  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  qq音乐在线播放入口_qq音乐电脑版登录链接  狙击外星人小游戏开始_狙击外星人小游戏立即开始  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  解决Python logging 中 datefmt 导致时间戳固定不变的问题  谷歌google账号怎么注册账号 谷歌账号注册官方流程  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  优化大型XML文件解析:基于Python流式处理的内存高效方案  探索高级语言到原生C/C++的转译:挑战与内存管理策略  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  限制HTML日期输入框的日期选择范围  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  CSS图片焦点样式实现教程:理解与应用tabindex属性  如何在网页中实现特定地点的随机图片展示  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  解决移动端滚动问题的overflow属性应用指南  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  大麦的“候补”是什么意思 大麦候补购票规则【详解】  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  J*aScriptWebpack优化_J*aScript构建工具实战 

搜索