Что эквивалентно ядру ServiceBase.RequestAdditionalTime в. net с использованием BackgroundService? - PullRequest
1 голос
/ 30 января 2020

В наших сервисах. NET Framework мы всегда запрашиваем дополнительное время у менеджера управления службами, когда наши службы начинают давать им больше времени для запуска, чем по умолчанию (30 секунд?), Прежде чем сообщить, что они еще не запущены.

Мы делаем это с помощью метода RequestAdditionalTime класса ServiceBase, например,

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

Мы делаем это, потому что мы проверяем некоторые вещи, такие как совместимость версий с базой данных SQL, запущенной в SQL Сервер перед запуском любого другого потока и т. Д. c на случай, если служба не запустится. Мы обнаружили, что SQL Сервер не всегда работал вовремя, чтобы служба подключалась к нему при запуске, поэтому мы просим, ​​чтобы диспетчер управления службами предоставил службе больше времени для запуска, чтобы мы могли повторить подключение к базе данных.

Я хочу сделать то же самое с нашими службами. NET core 3, но не могу найти эквивалентного способа запросить дополнительное время у менеджера управления службами. Так что, если у нас есть BackgroundService, который мы настроили с помощью UseWindowsService () в компоновщике хоста, как я могу запросить больше времени, как у нас. NET Framework?

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

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

Мы использование. NET Core 3.1.1 и запуск exe как службы в Windows.

...