Правильный способ запуска BackgroundService в ASP.NET Core - PullRequest
0 голосов
/ 19 октября 2018

Я реализовал BackgroundService в приложении ASP.NET Core 2.1:

public class MyBackgroundService : BackgroundService
{
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (true)
        {
            await DoSomethingAsync();
            await Task.Delay(10 * 1000);
        }
        return Task.CompletedTask;
    }
}

Я зарегистрировал его в своем методе ConfigureServices():

services.AddSingleton<MyBackgroundService>();

Я в настоящее время (неохотно) запустив его, вызвав (и не ожидая) метод StartAsync() из метода Configure():

app.ApplicationServices.GetService<SummaryCache>().StartAsync(new CancellationToken());

Каков наилучший метод для запуска службы с длительным запуском?

1 Ответ

0 голосов
/ 04 февраля 2019

явный вызов StartAsync не требуется.

вызов

services.AddSingleton<MyBackgroundService>();

не будет работать, поскольку все реализации служб разрешаются через DI через интерфейс IHostedService. изменить: например, svcProvider.GetServices<IHostedService>() -> IEnumerable<IHostedService>

Вам необходимо позвонить либо:

services.AddSingleton<IHostedService, MyBackgroundService>();

или

services.AddHostedService<MyBackgroundService>();

изменить: AddHostedService такжерегистрирует IHostedService: https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.servicecollectionhostedserviceextensions.addhostedservice?view=aspnetcore-2.2

...