c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作
ASP.NET MVC 异步控制器及EF异步操作
异步控制器
- ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如
那些花费大量时间等待网络或数据库操作完成的请求仍能保持对其他请求的响应;所以异步主要是高效率而不是提高一个
单独请求的响应速度,尽管异步花费了与同步一样的事件响应用户请求,但在异步管道中,服务器不会因为在等待一个请求
的完成而阻塞其他有用的任务执行
- 理解异步和同步ASP.NET代码的区别
- 首先理解web服务器是如何处理请求的。IIS维护了一个用来服务请求的空闲线程的集合(线程池)。当一个请求进入时,
线程池中的一个线程就别调度用来处理进入的请求。当一个线程正在处理一个请求时,他就不能用来处理其他的请求,直到他
完成第一个请求的处理。IIS同时服务多个请求的能力是基于一个假设:线程池中有空闲的线程来处理进入的请求
- 阻塞线程
- 线程正在等待网络调用完成,因此不能用来执行当前请求的其他任务
- 线程饥饿
- 只要线程池足够大的话,阻塞线程并不是什么大问题;然而在处理多个并发请求的大型应用程序中,可能会因为请求的数量过多而导致
等待数据的请求也多而阻塞了大量的线程,从而导致线程池没有足够的空闲线程来处理新的请求
- 语法
public async Task<ActionResult> News(string city)
{
NewService newService=new NewService();
NewsModel news=await newsService.GetNews(city);
return View(news);
}
- 相比同步操作,只需做三处改动:为操作添加async修饰符,返回类型改为Task,在需要长时间运行的方法前添加await
EF的异步操作
- 增

- Add方法只是导致实体在内存中的修改,SaveChanges方法才是导致命令执行,所以SaveChanges要异步执行
- 删

- Find方法使查询被发送到数据库进行检索,所以Find方法要异步执行
- 查

- pageData语句只是设置为一个查询语句,并没有执行,直到调用.ToList才会将数据从数据库中
查询并加载在内存中,所以ToList方法要异步执行
- 改

- FirstOrDefault方法返回的是序列的第一个元素或默认值,是向数据库中发起了请求,所以
该方法要异步执行
同步or异步
- 同步
- 操作简单或者能在短时间内执行完毕
- 简单性和可测试性
- 操作是CPU密集型,而非IO密集型
- 异步
- 阻塞的操作
- 一种可以让用户取消长时间运行的请求的机制
- 操作是IO密集型,而非CPU密集型
以上内容部分摘抄自《ASP.NET MVC 5》
代码GitHub地址
c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作的更多相关文章
- asp.net mvc异步查询
对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...
- ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的
在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...
- ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建
在上一篇"ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式.错误信息提示.validate方法的背后"中,了解了jQuery如何验证,如何显示错误信息,本篇要 ...
- ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后
ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便.但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异 ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- 温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法
什么是异步编程(Async/Await) Async/Await本质上是通过编译器实现的语法糖,它让我们能够轻松的写出简洁.易懂.易维护的异步代码. Async/Await是C# 5引入的关键字,用以 ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_three.html 第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实 ...
随机推荐
- git速度太慢
适用各种操作系统,本次测试于ubuntu,下载速度从二十几k提高到二百多k 1.查找域名对应的ip地址,并修改hosts文件 nslookup github.global.ssl.fastly.Net ...
- ORA-10858:在要求输入数字处找到非数字字符
今天在写sql语句的时候,运行报错:ORA-10858:在要求输入数字处找到非数字字符 在网上查了一下为什么会有这种错误,有一个建议是可能是写的sql语句中的日期没有处理.仔细看了一下自己写的代码 就 ...
- SSM项目layui分页实例
最近学了layui,发现其中的分页挺有意思的,所以整理了一下,一遍自己随时查看.(官方文档上已经很详细了,当中有不足的地方欢迎大家指出) 关于前台的js文件,css样式,js样式,大家可以到官网下 本 ...
- Swift开发iOS项目实战视频教程(二)---图片与动画
本课主要介绍UIImageview.NSTimer的使用.并介绍了一种动画实现方式. 本教程摒弃枯燥的语法和知识解说.全是有趣有料的项目实战! 视频优酷链接:v.youku.com/v_show/id ...
- 创建Web API并使用
昨晚有教一个网友在ASP.NET MVC里,创建Web API和在MVC视图中应用此API. 可以在ASP.NET MVC中,创建程序的model: namespace Insus.NET.Model ...
- Django后端彻底解决跨域问题
最近在接一个前后端分离的项目,后端使用的django-restframework,前端使用的Vue.后端跑起来后,发现前端在访问后端API时出了了跨域的问题. 类似如下报错: 关于跨域问题,之前这篇文 ...
- 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)
源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Ten ...
- 【下一代核心技术DevOps】:(二)Rancher的应用及优点简介
1.环境选择 安装Rancher环境,一定要在干净的linux主机上进行,避免出现因配置导致的莫名其妙的问题.服务器操作系统建议CentOS7.4(内核3.10以上)低于这个版本的系统 如7.3 7. ...
- Dethe is my Finaunce金融
英国诗人乔叟Dethe is my Finaunce金融 英语中“金融”在14世纪,金融计算时间价值的手段.就随机结果签约的能力.一个允许转让金融权后的清算.<Lamentation of Ma ...
- Centos下添加静态路由(临时和永久有效)的操作记录
公司IDC机房服务器上部署了一套外网LB环境,默认配置的是外网ip的路由地址,由于要和其他内网机器通信,所以需要配置内网ip的路由地址.整个操作过程,记录如下,以供以后参考学习: 1)内网网卡绑定 [ ...