最近看項目中異步控制器的一些代碼,發現新東西出來後,無論理不理解都處處亂用的現象還真是很多。算法
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操做。這樣在只有少數幾個併發操做的時候還無傷大雅,若是須要處理大量的併發操做時就不合適了。編程