Запустите метод BackgroundService ExecuteAsyn c из вызова REST в NET Core - PullRequest
0 голосов
/ 18 марта 2020

Я реализовал NET Core BackgroundService в соответствии с документацией Microsoft . Его метод ExecuteAsync запускается при запуске программы, и это прекрасно работает.

Как, однако, я могу выполнить фоновое задание (расположенное в ExecuteAsync методе интерфейса BackgroundService) не только с момента запуска программы, но, скажем, с помощью вызова REST?

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Если я правильно понимаю вашу проблему, вы можете сделать это:

public class Controller
{
   private readonly IServiceProvider _serviceProdiver;

   public Controller(IServiceProvider serviceProdiver)
   {
       _serviceProvider = serviceProvider;
   }

   public async Task RunAllBackgroundServices()
   {
      var allBackgroundServices = _serviceProvider.GetServices<IHostedService>();

      foreach(var hostedService in allBackgroundServices)
      {
          await hostedService.StartAsync(CancellationToken.None);
      }
   }
}

С помощью DI вы получите все реализации IHostedService и запустите их.

0 голосов
/ 18 марта 2020

Если я понимаю, чего вы пытаетесь достичь, невозможно напрямую вставить «рабочее» задание в BackgroundService. Однако вы можете запланировать задание в очереди (очередь или база данных или что-то еще) или использовать систему сообщений о событиях для вашего фонового работника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...