【问题标题】:Task.Run() blocks startup of .net core applicationTask.Run() 阻止 .net 核心应用程序的启动
【发布时间】:2020-03-24 08:24:18
【问题描述】:
public void Configure(...)
{
   ...
   Task.Run(() =>
            {
                var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
                eventBus.Subscribe<Event1, Event1Handler>("key");
            });
}

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    有了这个,我实现了 webApi 启动,没有中断和后台进程,它试图连接到 rabbitmq 直到它实现。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2020-12-13
      • 2018-01-30
      相关资源
      最近更新 更多