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

     2023-03-31     105

关键词:

【中文标题】我需要在启动时在 ASP .Net Core 3.1 Web API 中执行异步方法【英文标题】:I need to execute an async method at startup in an 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 中启动时执行代码的最佳实践?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

Dotnet 在 Mac ASP.NET Core 3 上意外退出

...。2-3次后,我看到如下错误。我不知道是什么问题,但我需要重新启动系统才能再次工作。我检查了它没有使用的端口。Pr 查看详情

我可以在 ASP.NET Core 启动期间访问数据库吗?

】我可以在ASP.NETCore启动期间访问数据库吗?【英文标题】:CanIaccessadatabaseduringstartupinASP.NETCore?【发布时间】:2016-08-0219:07:19【问题描述】:我最近一直在研究.NETCoreWebAPI。我刚刚按照https://stormpath.com/blog/token-authentication-asp-net-co... 查看详情

ASP.NET Core 3.1 - HTTP 错误 500.30 - ANCM 进程内启动失败

】ASP.NETCore3.1-HTTP错误500.30-ANCM进程内启动失败【英文标题】:ASP.NETCore3.1-HTTPError500.30-ANCMIn-ProcessStartFailure【发布时间】:2020-08-2323:41:09【问题描述】:我正在使用3.1版本配置netcorewebapi。我已经在这里检查了这个问题,但没有一... 查看详情

如何在 ASP.NET Core 3.1 生产中配置 IdentityServer

...在开发中运行良好,但在生产环境中,我收到以下错误。启动应用程序时出错。InvalidOperationExceptio 查看详情

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

...起作用,每次我得到一个空值。我曾经编写PHP代码,我只需要启动会话并获取值 查看详情

如何在 ASP.NET Core 中设置启动路由

】如何在ASP.NETCore中设置启动路由【英文标题】:HowToSetStartupRouteInASP.NETCore【发布时间】:2017-07-1001:22:30【问题描述】:我的ASP.NETcoreapp启动路径设置为:/api/values我想把这条启动路线改成:/查看文档有很多关于路由约束的规范... 查看详情

如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

...512:30:43【问题描述】:我试图在加载应用程序时在第一次启动时加载登录页面。到目前为止我尝试了什么配置app.UseEndpoints(endpoints=>endpoints.MapControllerRoute(name 查看详情

属性路由在 asp.net core 3.0 中无法正常工作

...我的应用程序从asp.netcore2.1迁移到使用属性路由的3.0我的启动文件的ConfigureServices和Configure方法:publicvoidConfigureServices 查看详情

路由覆盖在 asp.net core 3.1 剃须刀页面中不起作用

...505:44:16【问题描述】:我正在使用Asp.NetCore3.1Razorpages。我需要覆盖我所在区域的其中一个页面的路线。我的Area-Blog中有Home页面,当前路线是localhost/blog/home。我需要将其更 查看详情

如何在 ASP.NET Core 3.1 中逐行迭代列表

...21-03-0208:48:25【问题描述】:我有一个list<>,我需要将列表的每一行传递给一个存储过程。我目前有一个foreach循环来计算循环中的行数并迭代那么多次。但它每次只迭代第一行。相反,我想每次都去下一行。我正在使... 查看详情

ASP.NET Core 在启动时解析 url?

】ASP.NETCore在启动时解析url?【英文标题】:ASP.NETCoreresolveurlinstartup?【发布时间】:2017-06-2813:17:57【问题描述】:我希望能够注册某些考虑到资源实际URL的URL。具体来说:我的WebAPI文档的Swagger端点。publicvoidConfigure(IApplicationBuilde... 查看详情

如何在 ASP.NET Core MVC 中使用我的视图模型更新我的 3 个表(我已经有了 Create)

...:首先,我有Parent、Student和CurrentYearStudent表,一个学生需要一个家长,所以显然需要 查看详情

Asp.Net Core API 禁用启动完成消息

】Asp.NetCoreAPI禁用启动完成消息【英文标题】:Asp.NetCoreAPIdisablestartupcompletemessage【发布时间】:2017-05-2514:07:11【问题描述】:作为我的应用程序的一部分,我有一个.NetCoreAPI项目。与该项目作为自己的进程运行的大多数情况不同... 查看详情

无法使用 HTTPS 启动 ASP.NET Core

】无法使用HTTPS启动ASP.NETCore【英文标题】:UnabletostartASP.NETCorewithHTTPS【发布时间】:2017-11-2201:41:33【问题描述】:我有一个WPF应用程序,它启动一个ASP.NET核心WEBAPI应用程序。当我使用这些配置启动WEBAPI项目作为启动项目时,它... 查看详情

在 ASP.NET Core 3 中使用 id_token

...2020-03-1322:41:37【问题描述】:在ASP.NETCore3应用程序中,我需要处理来自id_token和access_token的信息。id_token有会员信息,有时需要这些信息来制定政策。由于成员信息可能很大,将其作为access_token的一部分是不可能的(令牌超过允... 查看详情

在 ASP .Net Core MVC 中启动时执行数据库更新

】在ASP.NetCoreMVC中启动时执行数据库更新【英文标题】:ExecutingDBUpdateonStartupinASP.NetCoreMVC【发布时间】:2021-12-1017:52:51【问题描述】:我正在开发一个应用程序,该应用程序应该从一台服务器获取数据并将数据放入我的数据库中... 查看详情

如何从 Asp.NET Core 3.1 启动类访问 launchSettings.json 中的 `applicationUrl` 属性?

】如何从Asp.NETCore3.1启动类访问launchSettings.json中的`applicationUrl`属性?【英文标题】:HowDoYouAccessthe`applicationUrl`PropertyFoundinlaunchSettings.jsonfromAsp.NETCore3.1Startupclass?【发布时间】:2019-12-1818:53:32【问题描述】:我目前正在创建一个Asp... 查看详情

如何强制 Quartz 现在在 ASP.NET Core 中启动?

】如何强制Quartz现在在ASP.NETCore中启动?【英文标题】:HowtoforceQuartztostartnowinASP.NETCore?【发布时间】:2021-12-1317:54:30【问题描述】:我有一个由Quartz在ASP.NETCore中安排的作业,每15分钟运行一次。我想最初运行它(强制Quartz现在... 查看详情