You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET控制台应用中继承BaseServices/IHostedServices的方法探讨

无需依赖Worker模板,手动给控制台应用添加Hosted Service支持

完全不需要必须用dotnet new worker命令,你可以直接在现有控制台项目里手动添加相关依赖和代码,实现和Worker模板一致的启停控制逻辑,步骤如下:

  • 添加核心NuGet依赖
    首先安装Hosted Service的基础包,在项目目录执行命令:

    dotnet add package Microsoft.Extensions.Hosting
    
  • 创建自定义Hosted Service类
    有两种实现方式,推荐继承BackgroundService(它是IHostedService的抽象实现,帮你封装了基础启停逻辑),示例代码:

    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class CustomHostedService : BackgroundService
    {
        private readonly ILogger<CustomHostedService> _logger;
    
        public CustomHostedService(ILogger<CustomHostedService> logger)
        {
            _logger = logger;
        }
    
        // 服务启动后执行的核心业务逻辑
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogInformation("自定义服务已启动");
            
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("服务正在运行中...");
                await Task.Delay(1000, stoppingToken);
            }
    
            _logger.LogInformation("服务即将停止");
        }
    
        // 可选:重写此方法添加自定义停止逻辑
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("执行自定义停止清理操作");
            await base.StopAsync(cancellationToken);
        }
    }
    
  • 修改Program.cs配置Host
    把原来的控制台入口逻辑替换为Host托管模式,注册你的自定义服务:

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    var host = Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            // 注册Hosted Service
            services.AddHostedService<CustomHostedService>();
        })
        .Build();
    
    // 启动Host并等待服务停止
    await host.RunAsync();
    
  • 测试启停效果
    执行dotnet run启动项目,控制台会输出服务启动、运行的日志;按Ctrl+C触发停止,会执行你定义的停止逻辑并输出对应日志。

额外说明

dotnet new worker模板只是帮你自动完成了上述所有步骤:添加依赖、生成默认Worker类、配置Host。手动实现的方式完全等效,还能根据需求灵活调整(比如注册多个Hosted Service、自定义Host配置等),自由度更高。

内容的提问来源于stack exchange,提问作者RealDevMashup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:06:45