小编Sim*_*mer的帖子

.net core 中使用BackgroundService 的ServiceBase.RequestAdditionalTime 相当于什么?

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

我们使用 ServiceBase 类的 RequestAdditionalTime 方法来执行此操作,例如

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

我们这样做是因为在启动任何其他线程之前,我们会检查一些内容,例如与 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.
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

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

c# windows-services background-service .net-core

9
推荐指数
0
解决办法
2066
查看次数