異步!=多線程

最近看項目中異步控制器的一些代碼,發現新東西出來後,無論理不理解都處處亂用的現象還真是很多。算法

  public async Task<ActionResult> Testasync(string url)
        {
            WebRequest request = WebRequest.Create("http://kb.cnblogs.com/page/116095/");
            string s = Thread.CurrentThread.ManagedThreadId.ToString();
            s += "|";
            WebResponse respont = await request.GetResponseAsync();
            s += Thread.CurrentThread.ManagedThreadId.ToString();
            return Content(s);
        }

線程的個數是有限的,異步是交還出線程,利用硬件的DMA完成io處理或者網絡處理請求。數據庫

當須要執行I/O操做時,使用異步操做比使用線程+同步I/O操做更合適。I/O操做不只包括了直接的文件、網絡的讀寫,還包括數據庫操做、Web Service、HttpRequest以及.Net Remoting等跨進程的調用。
  而線程的適用範圍則是那種須要長時間CPU運算的場合,例如耗時較長的圖形處理和算法執行。可是每每因爲使用線程編程的簡單和符合習慣,因此不少朋友每每會使用線程來執行耗時較長的I/O操做。這樣在只有少數幾個併發操做的時候還無傷大雅,若是須要處理大量的併發操做時就不合適了。編程

相關文章
相關標籤/搜索