首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有实体框架方法都应该使用异步吗?

问所有实体框架方法都应该使用异步吗?
EN

Stack Overflow用户
提问于 2016-11-12 12:56:01
回答 1查看 7.4K关注 0票数 14

在Asp.Net MVC或Asp.Net Web中,让查询数据库(甚至是最简单的查询)的每个控制器操作都使用异步/等待模式是很好的做法吗?

我知道使用异步/等待会增加复杂性,但是添加它值得吗?即使是最简单的查询?

EN

回答 1

Stack Overflow用户

发布于 2016-11-12 14:49:34

实体框架使用数据库,需要访问数据库服务器。使用EF,您将需要连接数据库服务器,并等待服务器响应您的请求。

如果应用程序使用磁盘或网络(比如访问数据库),那么它就是在执行I/O操作。每个I/O操作都应该使用异步/等待模式,这是一个很好的实践,也就是EF6公开了许多您可以使用的异步操作。

I/O界是指完成计算所需时间主要由等待输入/输出操作完成的时间决定的条件。资料来源:Wikipedia

一些精确性:

每个ASP.Net Web请求都使用由.Net框架线程池提供的线程。如果您对ASP.Net Web操作使用同步方法,那么I/O绑定操作(数据库访问)将阻塞线程并等待数据库响应。请求使用的线程将被阻塞,而不会返回到线程池。

胎面池使用的最大线程为5000 (.Net 4.5)。如果您的应用程序是一个大型应用程序,则可以迅速达到最大值。如果线程池中没有可用的线程,那么将向队列中添加新的请求。如果您的服务器队列已满,它将拒绝具有HTTP 503状态的请求,该状态代表“服务器太忙”。

如果您的ASP.Net Web操作使用异步/等待模式,那么每个I/O绑定操作都将释放当前请求的线程。此线程可由另一个请求使用。如果I/O绑定操作完成了它的任务,那么将给出另一个线程来处理ASP.Net Web操作方法的其余部分。

所以要回答你的问题。如果应用程序具有大量并发性,则需要访问数据库的ASP.Net Web的每个操作都应该使用异步/等待模式。即使您的应用程序不是更大的应用程序,也总是建议使用异步/等待I/O绑定操作。

您可以检查这个文章。它讨论了用于ASP.Net MVC的“使用异步方法”,但大多数建议都可以用于ASP.Net Web。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40563046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档