ASP.NET MVC使用异步TPL模式
1、MVC中如何使用异步
我们新建一个MVC的项目,我们在Home控制器的Index方法里面读取一个文件的内容,然后返回给用户,我们看下面的代码:
/// <summary> /// 异步方法 /// </summary> /// <returns></returns> public Task<ActionResult> Index() { return Task.Run<ActionResult>(() => { using (StreamReader sr = new StreamReader("F:\test.txt")) { string txt = sr.ReadToEnd(); return Content(txt); } }); }
我们可以得出结论:如果要在MVC中使用异步方法,只需要将返回值改为Task<ActionResult>即可,如果方法标记为async,连自己创建Task都可以省略:
/// <summary> /// 异步方法,并使用async标注 /// </summary> /// <returns></returns> public async Task<ActionResult> Index() { using (StreamReader sr = new StreamReader("F:\test.txt")) { string txt =await sr.ReadToEndAsync(); return Content(txt); } //return View(); }
2、MVC中使用异步提升性能
现在开发ASP.NET MVC程序,建议都使用异步。因为异步可以提升系统的性能。准确来讲,不是提升性能,不会提高访问速度,而是提高服务器的“吞吐量”,也就是可以处理的并发请求数。
到此这篇关于ASP.NET MVC使用异步TPL模式的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C#多线程TPL模式下使用HttpClient
一.引言 我们有时侯需要在程序里面调用Http接口.请求http资源.编写http爬虫等的时候都需要在程序里面进行Http请求.很多人习惯的WebClient.HttpWebRequest在TPL下有很多用起来不方便的地方,TPL下推荐使用HttpClient(using System.Net.Http),而且在.NET Core下已经不在支持WebClient等. 1.发送Get请求 HttpClient发出Get请求获取文本响应,如下面的代码: // 实例化HttpClient对象 Http
-
C#多线程TPL常见操作误区与异常处理
一.一定要async到底 一定要让async的传染性(调用异步方法要用await,用了await的方法就要声明为async,调用我这个async方法的地方必须要await.....)不要轻易直接调用Task的Wait.WaitAll等方法.等待一个用await,而不是task.Wait():等待多个用await Task.WhenAll(),而不是Task.WaitAll(). 二.用了异步性能不一定高 程序里面使用了异步不一定说性能就一定高,下面的异步方法就没有意义: public async
-
C#多线程TPL模式高级用法探秘
一.引言 我们先来看下面的一个小示例:一个Winfrom程序,界面上有一个按钮,有两个异步方法,点击按钮调用两个异步方法,弹出执行顺序,代码如下: using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace TPLDemoSln { public partial class Form1 : Form { public Form1() { Init
-
ASP.NET MVC使用异步TPL模式
1.MVC中如何使用异步 我们新建一个MVC的项目,我们在Home控制器的Index方法里面读取一个文件的内容,然后返回给用户,我们看下面的代码: /// <summary> /// 异步方法 /// </summary> /// <returns></returns> public Task<ActionResult> Index() { return Task.Run<ActionResult>(() => { using
-
asp.net mvc CodeFirst模式数据库迁移步骤详解
利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ? 哈哈 利用数据库迁移,将原有结构不改动,将新建类进行单独建表操作,或者是已有数据库表,改变字段,那就修改表. 迁移步骤: 1.打开程序包管理器控制台:工具->NuGet包管理器->程序包管理器控制台.(当然还有其它方式也可以打开,我比较喜欢这种) 点击后将弹出程序包管理器控制台 极其要注意的是默认项目!!! 2.启动
-
详解ASP.NET MVC下的异步Action的定义和执行原理
Visual Studio提供的Controller创建向导默认为我们创建一个继承自抽象类Controller的Controller类型,这样的Controller只能定义同步Action方法.如果我们需要定义异步Action方法,必须继承抽象类AsyncController.这篇问你讲述两种不同的异步Action的定义方法和底层执行原理. 一.基于线程池的请求处理 ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池
-
详解Spring MVC的异步模式(高性能的关键)
什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器都如此般处理.现在想想如果处理的过程中需要调用后端的一个业务逻辑服务器,会是怎样呢? 调就调吧,上图所示,请求处理线程会在Call了之后等待Return,自身处于阻塞状态.这也是绝大多数Web服务器的做法,一般来说这样做也够了,为啥?一来"长时间处理服务"调用通常不多,二来请求数其实也不多
-
ASP.NET MVC模式中应用程序结构详解
目录 一.App_Data 二.App_Start 三.Content 四.Controllers 五.font 六.Models 七.Scripts 八.Views 九.Web.config 1.根目录下面的Web.config文件 2.Views文件夹下面的Web.config 十.Global.asax 在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App
-
ASP.NET MVC模式简介
目录 一.MVC模式简介 1.MVC在Web框架中的应用 2.执行顺序 二.ASP.NET中的MVC 1.ASP.NETMVC和ASP.NET 2.ASP.NETMVC和WebForms 三.创建ASP.NETMVC 1.选择文件->新建->项目 2.选择.NETFramework版本的ASP.NETMVC 3.配置项目名称和路径 3.1.选择一种应用程序模板 3.2.测试 3.3.配置身份验证 一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Mod
-
ASP.NET MVC+EF实现异步增删改查
目录 功能实现 1.搭建UI层 2.添加实体类 3.添加服务接口层 4.添加Entity Framework 1.开启迁移 2.增加迁移 3.生成数据库 5.添加接口的实现类 6.添加控制器 功能实现 我们以学生为例,实现增删改查功能. 1.搭建UI层 我们这里使用ASP.NET MVC作为界面层显示数据,首先创建一个解决方案,然后添加一个MVC项目,命名为TaskAsync.UI,创建后的项目结构如下图所示: 2.添加实体类 我们把实体类放在单独的类库里面,新建一个类型项目,命名为TaskAs
-
ASP.NET MVC小结之基础篇(一)
前言:前几天要准备一个演讲,所以准备了MVC的一些基本的东西,以前也使用过MVC,但是只是使用,而不是去了解,所以趁着这个机会好好的把别人的MVC视频看了一下(是一个微软的MVP会员发布的视频,相信有些人都看过),整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西.本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章! 什么是ASP.NET MVC (1) ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架 (2)M
-
Asp.net MVC实现生成Excel并下载功能
本文实例为大家分享了Asp.net MVC实现生成Excel并下载的具体代码,供大家参考,具体内容如下 由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式. 每个ActionResult必然会返回一个View或Json等(View或Json中的参数都是object类型的) 所以我们需要一个公共类来统一定义操作的"成功或失败"的状态或返回操
随机推荐
- SpringMVC中日期格式的转换
- 详解javascript事件绑定使用方法
- 利用noesis.Javascript开源组件.Net中执行javascript脚本
- 比较不错的C#中的常用的正则表达式
- 详解Python中open()函数指定文件打开方式的用法
- 一个简单的网页密码登陆php代码
- 分析MySQL中优化distinct的技巧
- 深入理解在JS中通过四种设置事件处理程序的方法
- 设计高可用和高负载的网站系统的几个注意事项
- JavaScript 事件流、事件处理程序及事件对象总结
- mySQL 延迟 查询主表
- javascript设计模式之单体模式学习笔记
- 基于JavaMail的Java实现复杂邮件发送功能
- Android中自定义ImageView添加文字说明详解
- javascript内存分配原理实例分析
- 微信小程序 网络API 上传、下载详解
- 快速解决ajax请求出错状态码为0的问题
- MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法
- 易语言d2d创建人物的步骤教学
- tomcat管道模式 pipeline与valve详解