asp.net mvc3 异步Controller

本文探讨了同步与异步操作的选择标准,并详细介绍了在ASP.NET MVC中如何运用异步控制器来提高程序性能。针对不同场景,文章提供了实用的指导建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直认为异步效率比同步要好,今天看了下其实不是所有需求都适用于异步,啥时候用同步异步如下:  

满足以下条件时使用同步管线:

1,操作很简单或运行时间很短。 

2,简单性比效率更重要。

3,此操作主要是 CPU 操作而不是包含大量的磁盘或网络开销的操作。 对 CPU 绑定操作使用异步操作方法未提供任何好处并且还导致更多的开销。

在满足以下条件时使用异步管线:

1,操作是网络绑定的或 I/O 绑定的而不是 CPU 绑定的。

2,测试显示阻塞操作对于网站性能是一个瓶颈,并且通过对这些阻塞调用使用异步操作方法,IIS 可对更多的请求提供服务。

3,并行性比代码的简单性更重要。

4,您希望提供一种可让用户取消长时间运行的请求的机制

在使用异步操作的时候需要占用更多的资源,因为一个线程在理论上好像是2m,如果在在整个应用程序中用异步太多将会出现内存不足,从而出现503错误(服务器正忙),所以在使用异步的时候也要慎用,假如一定要是用也是为了在程序中增加性能等,参照上序何时使用同步与异步

在asp.net mvc中使用异步控制器:

控制器继承AsyncController ,AsyncController拥有所有Controller的特性,所以在控制器中AsyncController同样可以实现同步,实现异步的action需要以xxxAsync开始,以xxxComleted呈现给页面,视图命名为xxx.aspx,也不是xxxAsync.aspx,更同步命名是一样的

 public class HomeController : AsyncController
    {
        public void IndexAsync()
        {
            AsyncManager.OutstandingOperations.Increment(2);//两个异步
            AsyncManager.Parameters["name"] = "objectboy"; 
           
            AsyncManager.OutstandingOperations.Decrement();

            AsyncManager.Parameters["age"] = "25";
            AsyncManager.OutstandingOperations.Decrement();
        }
        public ActionResult IndexCompleted(string name,string age)
        {
            return Content(name+age);
        }
    }   

AsyncManager: 为AsycController 类提供异步操作。

OutstandingOperations:获取未完成操作的数目。

我的事例上通过Parameters的形式传递值,将name,age两个参数传递给xxxCompleted呈现,运行后结果为 :objectboy25

转载于:https://www.cnblogs.com/objectboy/archive/2013/05/04/3060060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值