gpt4 book ai didi

c# - 将 await 与异步数据库调用一起使用有什么好处

转载 作者:可可西里 更新时间:2023-11-01 08:03:47 25 4
gpt4 key购买 nike

我只是在查看默认的 MVC5 项目以及它如何在 Controller 中使用异步。

我想知道与简单地使用同步调用相比,异步在这里提供了哪些好处:

    [HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Disassociate(string loginProvider, string providerKey)
{
ManageMessageId? message = null;

//why use an async database call here with await instead of just using a synchronous one?
IdentityResult result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
if (result.Succeeded)
{
message = ManageMessageId.RemoveLoginSuccess;
}
else
{
message = ManageMessageId.Error;
}
return RedirectToAction("Manage", new { Message = message });
}

我错过了什么?

这是否会在此处发生的等待类型中提供某种性能优势?

最佳答案

在服务器端(例如 ASP.NET MVC),您执行的任何 I/O(例如数据库)都应该异步完成。这会在 I/O 运行期间释放请求线程。

因此,当 RemoveLoginAsync 将其 SQL 发送到数据库时,它会返回一个未完成的任务,而当请求到达 await 时,它会将请求线程返回给线程池。稍后,当数据库操作完成时,从线程池中取出一个请求线程,用于继续请求。

最终结果是可扩展性,因为(至少在 99.9% 的情况下)任务比线程更好地扩展。但是,如果您的数据库只是一台服务器并且所有请求都到达数据库,则没有太大优势,因为在这种情况下您的可扩展性瓶颈是数据库服务器,而不是 Web 服务器。

关于c# - 将 await 与异步数据库调用一起使用有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20851843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com