• asp.net mvc3 异步Controller


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

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

    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

  • 相关阅读:
    go语言——strings和strconv
    go语言——map
    Manjaro配置
    go语言——数组和切片
    go语言——随机数
    go——选择和循环
    go语言——输入输出
    java动态代理实现--基于子类的动态代理
    java动态代理实现--基于接口的动态代理
    spring依赖注入
  • 原文地址:https://www.cnblogs.com/objectboy/p/3060060.html
Copyright © 2020-2023  润新知