Kah*_*azi 10 c# asp.net-mvc asynchronous asp.net-web-api entity-framework-6
在Asp.Net MVC或Asp.Net Web API中,使用查询数据库(即使是最简单的查询)的每个控制器操作都使用async/await模式是不错的做法?
我知道使用async/await会增加复杂性,但是添加它值得吗?即使是最简单的查询?
Cod*_*und 15
实体框架使用数据库并需要访问数据库服务器.使用EF,您需要连接数据库服务器并等待服务器响应您的请求.
如果您的应用程序使用磁盘或网络(如访问数据库)读/写,那么它正在进行I/O操作.这是一个很好的做法,每个I/O操作都应该使用async/await模式,这是EF6公开了许多可以使用的异步操作.
I/O bound指的是一种条件,其中完成计算所花费的时间主要由等待输入/输出操作完成所花费的时间来确定.资料来源:维基百科
一些准确性:
每个ASP.Net Web API请求都使用.Net Framework线程池提供的线程.如果对ASP.Net Web API操作使用同步方法,则I/O绑定操作(数据库访问)将阻塞该线程并等待数据库响应.您的请求使用的线程将被阻止,不会返回到线程池.
胎面池使用的最大线程为5000(.Net 4.5).如果您的应用程序是一个大型应用程序,可以快速达到最大值.如果线程池中没有可用的线程,则会将新请求添加到队列中.如果您的服务器队列已满,它将拒绝HTTP 503状态的请求,即"Server Too Busy".
如果您的ASP.Net Web API操作使用async/await模式,则每个I/O绑定操作将释放当前请求的线程.该线程可以被另一个请求使用.如果I/O绑定操作完成其任务,则给出另一个线程来处理其余的ASP.Net Web API操作方法.
所以回答你的问题.如果您的应用程序可以具有大量并发性,则需要访问数据库的ASP.Net Web API的每个操作都应使用async/await模式.即使您的应用程序不是更大的应用程序,也始终建议使用async/await进行I/O绑定操作.
你可以查看这篇文章.它讨论ASP.Net MVC的"使用异步方法",但大多数建议可用于ASP.Net Web API.
| 归档时间: |
|
| 查看次数: |
4011 次 |
| 最近记录: |