搜索

查看: 3049|回复: 11

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

[复制链接]
发表于 2023-5-4 11:32:11 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:32:11 3049 11 看全部
在没有使用异步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 Task Index()
{
        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 Task Index()
{
        ...
}
如果不想对操作超时设限。
[NoAsyncTimeout]
public async Task Index()
{
        ...
}
综上,当涉及到调用第三方服务的时候,就可以考虑使用异步Action。async和await是异步编程的2个关键字,async总和Action
到此这篇关于ASP.NET MVC使用异步Action的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 00:59:57 | 显示全部楼层
塞翁364 2023-6-29 00:59:57 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-6-29 16:24:49 | 显示全部楼层
123456833 2023-6-29 16:24:49 看全部
楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
回复

使用道具 举报

发表于 2023-6-29 18:35:22 | 显示全部楼层
当当当当裤裆坦 2023-6-29 18:35:22 看全部
这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 19:48:56 | 显示全部楼层
掌舵的鱼1987 2023-6-29 19:48:56 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 23:54:44 | 显示全部楼层
123456848 2023-6-29 23:54:44 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-30 08:54:00 | 显示全部楼层
丁侦球 2023-6-30 08:54:00 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
回复

使用道具 举报

发表于 2023-7-3 08:28:37 | 显示全部楼层
落败的青春阳落s 2023-7-3 08:28:37 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
回复

使用道具 举报

发表于 2023-7-3 09:44:17 | 显示全部楼层
462710480 2023-7-3 09:44:17 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-7-3 11:28:01 | 显示全部楼层
123456825 2023-7-3 11:28:01 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 知鸟论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表