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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM