一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ASP.NET M5C使用异步Action的方法

时间:2026-09-15 21:40:01 编辑:袖梨 来源:一聚教程网

这篇文章介绍了ASP.NET MVC使用异步Action的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在没有使用异步Action之前,在Action内,比如有如下的写法:

public ActionResult Index(){CustomerHelper cHelper = new CustomerHelper();List<Customer> 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<List<Customer>> GetCustomerDataAsync(){MyContenxt db = new MyContext();var query = from c in db.Customersorderby c.Id ascendingselect c;List<Customer>result = awai query.ToListAsycn();return result;}}

现在就可以写一个异步Action了。

public async Task<ActionResult> Index(){CustomerHelper cHelper = new CustomerHelper();List<Customer> result = await cHlper.GetCustomerDataAsync();return View(result);}

Index视图和同步的时候相比,并没有什么区别。

@model List<Customer>@foreach(var customer in Model){<span>@customer.Name</span>}

当然,异步还设计到一个操作超时,默认的是45秒,但可以通过AsyncTimeout特性来设置。

[AsyncTimeout(3000)]public async Task<ActionResult> Index(){...}

如果不想对操作超时设限。

[NoAsyncTimeout]public async Task<ActionResult> Index(){...}

综上,当涉及到调用第三方服务的时候,就可以考虑使用异步Action。async和await是异步编程的2个关键字,async总和Action

到此这篇关于ASP.NET MVC使用异步Action的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持一聚教程网。

热门栏目