c# - 我需要在 ASP .Net Core 3.1 Web API 启动时执行异步方法

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

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

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

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

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

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

最佳答案

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

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

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

关于c# - 我需要在 ASP .Net Core 3.1 Web API 启动时执行异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65213047/

相关文章:

c# - 如何编译 .NET Core 2.1 API 项目以面向 .NET Framework 4.7

c# - ASP.NET Core 2.1 Razor Form,Post 未到达 Controller

c# - LoadFromContext 发生

c# - 使用 Rx 构建可观察的存储库

c# - 如何在不使用youtube API的情况下解析youtube xml

c# - 服务器端 SignalR 连接在长时间正常运行后失败

asp.net-identity - ASP.NET 5 Identity - 为用户刷新角色

c# - 如何管理更快地加载 aspx 页面?

c# - 如何在 Angular 6 中上传文件时修复 415 不受支持的媒体类型

c# - Azure ServiceBus 消息序列化/反序列化