首页 > 解决方案 > 使用 BackgroundService 的 .net 核心中的 ServiceBase.RequestAdditionalTime 等效于什么?

问题描述

在我们的 .NET 框架服务中,当我们的服务开始时,我们总是向服务控制管理器请求额外的时间,以便在报告它们尚未启动之前给它们比默认设置更多的时间(30 秒?)。

我们使用 ServiceBase 类的 RequestAdditionalTime 方法来做到这一点,例如

protected override void OnStart(string[] args)
{
    RequestAdditionalTime(120 * 1000);
    // Do stuff.
}

我们这样做是因为我们在启动任何其他线程之前检查了一些东西,例如与 SQL Server 中运行的 SQL 数据库的版本兼容性等,以防服务不应该启动。我们发现 SQL Server 并不总是及时运行以使服务在启动时连接到它,因此我们要求服务控制管理器给服务更多时间来启动,以便我们可以重试数据库连接。

我想对我们的 .NET core 3 服务做同样的事情,但找不到任何等效的方法来向服务控制管理器请求额外的时间。因此,如果我们有一个在主机构建器中使用 UseWindowsService() 配置的 BackgroundService,我如何像使用 .NET Framework 一样请求更多时间?

public class Worker : BackgroundService
    {
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            CheckDatabaseCompatibility();

            while (!stoppingToken.IsCancellationRequested)
            {
                // Do stuff.
            }
        }
}

我们使用 .NET Core 3.1.1 并在 Windows 中将 exe 作为服务运行。

标签: c#.net-corewindows-servicesbackground-service

解决方案


推荐阅读