【问题标题】:I need to execute an async method at startup in an ASP .Net Core 3.1 Web API我需要在启动时在 ASP .Net Core 3.1 Web API 中执行异步方法
【发布时间】:2020-12-09 08:22:06
【问题描述】:

我有一个 ASP .Net Core 3.1 Web API。当 API 启动时,我希望它从数据库中读取几个查找表并将它们存储在某个地方。这些表包含很少更改的数据(标题、国家、语言等)。这些数据可能每隔几年更改一次。因此,我希望它们在启动时被读取和存储以提高性能,而不是每次我需要这些数据时都读取数据库。

我所做的是创建一个读取所有这些查找表的服务。然后,在服务的构造函数中,我调用服务中的一个方法,该方法从数据库中进行实际读取。然后我在 Startup.ConfigureServices() 中将此服务注册为 Singleton。

问题是读取数据库表的方法是异步的,构造函数不能是异步的(据我了解)。

目前,它正在工作 - 该方法在服务的构造函数中调用,然后立即返回,而数据库表的读取发生在一个单独的进程中。无论如何,实际读数只需要一两秒钟。然而,我不喜欢这样。可以运行另一个需要访问此查找数据的代码,但数据可能尚未准备好。理想情况下,我希望在执行任何其他代码之前完成对这些查找表的读取。此外,我在 VS 中得到一条绿色的摆动线,并对此发出警告:)

所以我不确定如何解决它。是否有在 .Net Core API 中启动时执行代码的最佳实践?

【问题讨论】:

    标签: c# asp.net-core .net-core asp.net-core-webapi webapi


    【解决方案1】:

    您可以在 main 方法中执行此操作。由于 C# 7.1 可以应用程序入口点返回任务。

    看看这个例子。他在 main 方法中运行他的迁移(但他提到它有点混乱,所以您可以使用文章中描述的另一种方法)。我认为您可以以相同的方式加载数据。

    https://andrewlock.net/running-async-tasks-on-app-startup-in-asp-net-core-part-2/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多