在我们的.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 作为服务运行。