Task.Run()阻止.net核心应用程序的启动

时间:2020-03-24 08:24:18

标签: c# .net .net-core rabbitmq

public void Configure(...)
{
   ...
   Task.Run(() =>
            {
                var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
                eventBus.Subscribe<Event1, Event1Handler>("key");
            });
}

我的scenerio涵盖了应用程序启动时RabbitMq的缺失。我要在此处实现的目标是在后台运行此任务,并让我的应用程序以正常方式启动。

我得到的是应用程序仍然等待该任务的执行,并且此后响应。我想在此任务中使用.RetryForever()与rabbitmq建立连接,然后订阅队列,但是与此同时,我的服务应该在不使用Rabbitmq的情况下工作。

我在做什么错? 也许我应该更改尝试初始化与RabbitMq的连接的方式?

1 个答案:

答案 0 :(得分:1)

我用来自BackgroundService的适当类替换了Task.Run调用。

然后我在Program.cs方法中将其注册为HostedService:IHostBuilder CreateHostBuilder(string[] args)

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

通过此操作,我实现了没有中断和后台进程的webApi启动,该进程试图连接到Rabbitmq,直到实现为止。