c# - 使用 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 作为服务运行。
解决方案
推荐阅读
- javascript - 为什么这个 React 函数返回 NaN?
- arrays - 尝试使用 ForEach 循环从 .exe 中获取产品版本,然后基于该版本执行一批函数
- python - Python Selenium:页面重定向后单击继续按钮
- woocommerce - 如何将 Bootstrap 5 浮动标签添加到 WooCommerce 结帐字段?
- jenkins - Jenkins 配置作为代码迁移
- rust - esp32上虚拟内存中的循环缓冲区?
- python - 使用 sh 脚本执行 python 脚本时没有名为 __main__.xxx 的模块
- javascript - 如何在 html 中显示多个常量?
- php - 如何在父元素中动态显示子元素
- android - 试图在 android.R.class 中找到特定的图标。是否有所有图像的预览?