C# 我需要在ASP.NETCore3.1WebAPI中启动时执行一个异步方法

C# 我需要在ASP.NETCore3.1WebAPI中启动时执行一个异步方法,c#,asp.net-core,.net-core,asp.net-core-webapi,webapi,C#,Asp.net Core,.net Core,Asp.net Core Webapi,Webapi,我有一个ASP.NETCore3.1WebAPI。当API启动时,我希望它从数据库中读取两个查找表并将它们存储在某个地方。这些表格包含很少改变的数据(标题、国家、语言等)。这些数据可能每隔几年改变一次。因此,我希望在启动时读取和存储这些数据以提高性能,而不是每次需要这些数据时都读取数据库 我所做的是创建一个读取所有这些查找表的服务。然后,在服务的构造函数中,我调用服务中的一个方法,该方法实际读取数据库。然后,我在Startup.ConfigureServices()中将此服务注册为Singlet

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

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

问题是读取数据库表的方法是异步的,而构造函数不能是异步的(据我所知)

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


所以我不知道如何修复它。在.Net核心API中,是否有在启动时执行代码的最佳实践?

您可以在main方法中执行。因为C#7.1可以让应用程序入口点返回任务

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