Task.Run () блокирует запуск основного приложения. net - PullRequest
0 голосов
/ 24 марта 2020
public void Configure(...)
{
   ...
   Task.Run(() =>
            {
                var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
                eventBus.Subscribe<Event1, Event1Handler>("key");
            });
}

Мой scenerio покрывает отсутствие rabbitMq при запуске приложения. Здесь я пытаюсь выполнить эту задачу в фоновом режиме и запустить приложение в обычном режиме.

Что я получаю, так это то, что приложение все еще ожидает выполнения этой задачи и после этого реагирует. Я хотел бы использовать .RetryForever () внутри этой задачи, чтобы установить sh соединение с rabbitmq, а затем подписаться на очередь, но в то же время мой сервис должен работать без rabbitmq.

Что я делаю неправильно? Может быть, я должен изменить способ, которым я пытаюсь инициализировать соединение с rabbitMq?

1 Ответ

1 голос
/ 28 марта 2020

Я заменил вызов Task.Run соответствующим классом, полученным из BackgroundService.

Затем я зарегистрировал его как HostedService в методе Program.cs: IHostBuilder CreateHostBuilder(string[] args)

            .ConfigureServices(services =>
            {
                services.AddHostedService<MyHostedService>();
            });

Этим я Достигнут запуск webApi без прерывания и фонового процесса, который пытается подключиться к rabbitmq, пока не достигнет этого.

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