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

2023-12-05 0 963

在没有使用异步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.Customers
orderby c.Id ascending
select 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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持悠久资源网。

您可能感兴趣的文章:

  • ASP.NET Core MVC解决控制器同名Action请求不明确的问题
  • ASP.NET Core中如何利用多种方式给Action传参
  • Asp.Net中的Action和Func委托实现
  • ASP.NET Core中的Action的返回值类型实现
  • 浅谈Asp.net Mvc之Action如何传多个参数的方法
  • 解读ASP.NET 5 & MVC6系列教程(10):Controller与Action

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 ASP.NET ASP.NET MVC使用异步Action的方法 https://www.u-9.cn/biancheng/aspnet/94793.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务