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

问题描述 投票:0回答:1
public void Configure(...)
{
   ...
   Task.Run(() =>
            {
                var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
                eventBus.Subscribe<Event1, Event1Handler>("key");
            });
}

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

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

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

c# .net .net-core rabbitmq
1个回答
0
投票

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

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

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

通过这种方式,我实现了没有中断的webApi启动,并且后台进程一直尝试连接到Rabbitmq,直到实现为止。

© www.soinside.com 2019 - 2024. All rights reserved.