您现在的位置是:网站首页> 编程资料编程资料
ASP.NET MVC使用异步Action的方法_实用技巧_
2023-05-24
331人已围观
简介 ASP.NET MVC使用异步Action的方法_实用技巧_
在没有使用异步Action之前,在Action内,比如有如下的写法:
public ActionResult Index() { CustomerHelper cHelper = new CustomerHelper(); List result = cHelper.GetCustomerData(); return View(result); } 以上,假设,GetCustomerData方法是调用第三方的服务,整个过程都是同步的,大致是:
→请求来到Index这个Action
→ASP.NET从线程池中抓取一个线程
→执行GetCustomerData方法调用第三方服务,假设持续8秒钟的时间,执行完毕
→渲染Index视图
在执行执行GetCustomerData方法的时候,由于是同步的,这时候无法再从线程池抓取其它线程,只能等到GetCustomerData方法执行完毕。
这时候,可以改善一下整个过程。
→请求来到Index这个Action
→ASP.NET从线程池中抓取一个线程服务于Index这个Action方法
→同时,ASP.NET又从线程池中抓取一个线程服务于GetCustomerData方法
→渲染Index视图,同时获取GetCustomerData方法返回的数据
所以,当涉及到多种请求,比如,一方面是来自客户的请求,一方面需要请求第三方的服务或API,可以考虑使用异步Action。
假设有这样的一个View Model:
public class Customer { public int Id{get;set;} public Name{get;set;} }假设使用Entity Framework作为ORM框架。
public class CustomerHelper { public async Task> GetCustomerDataAsync() { MyContenxt db = new MyContext(); var query = from c in db.Customers orderby c.Id ascending select c; List result = awai query.ToListAsycn(); return result; } }
现在就可以写一个异步Action了。
public async TaskIndex() { CustomerHelper cHelper = new CustomerHelper(); List result = await cHlper.GetCustomerDataAsync(); return View(result); }
Index视图和同步的时候相比,并没有什么区别。
@model List@foreach(var customer in Model) { @customer.Name }
当然,异步还设计到一个操作超时,默认的是45秒,但可以通过AsyncTimeout特性来设置。
[AsyncTimeout(3000)] public async TaskIndex() { ... }
如果不想对操作超时设限。
[NoAsyncTimeout] public async TaskIndex() { ... }
综上,当涉及到调用第三方服务的时候,就可以考虑使用异步Action。async和await是异步编程的2个关键字,async总和Action
到此这篇关于ASP.NET MVC使用异步Action的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 利用FastReport传递图片参数在报表上展示签名信息的实现方法_实用技巧_
- .NET SkiaSharp 生成二维码验证码及指定区域截取方法实现_实用技巧_
- .NET中实现对象数据映射示例详解_实用技巧_
- .NET 6 跨服务器联表查询操作MySql、Oracle、SqlServer等相互联表_实用技巧_
- ASP.Net Core对USB摄像头进行截图_实用技巧_
- .Net中Task Parallel Library的基本用法_基础应用_
- 通用 HTTP 签名组件的另类实现方式_实用技巧_
- ASP.NET MVC遍历验证ModelState的错误信息_实用技巧_
- 如何使用ASP.NET Core 配置文件_实用技巧_
- .NETCore基于RabbitMQ实现延时队列的两方法_实用技巧_
