C#學習心得(二) 異步編程

         異步編程是指程序在執行異步操作時,無法馬上獲得結果,而在異步操作過程中,程序可以執行其他操作,當異步操作完成時,通過狀態,通知,回調等來告知調用者。異步編程的好處是顯而易見的,比如WEB應用,如果不是採用異步編程,那麼當客戶端向服務器發送請求時,在得到服務器響應的過程中,客戶端都處於一種等待狀況,用戶無法對其進行相關的操作,這樣的用戶體驗顯然是非常差的。

        C#異步編程有3種實現方式,第一種是APM(Asynchromous  Programming  Model ),.net類庫中的Beginxxx和Endxxx方法其實就實現了異步編程,當然用戶也可以自定義實現異步操作的類,要求這個類實現返回類型爲IAsyncResult的Beginxxx和Endxxx方法。

       第二種是 async  /  await  ,一下爲教科書上的一段代碼,

async	
  Task<int>	
  AccessTheWebAsync()	
   {		
  	HVpClient	client	 =	 new	 HVpClient();	

  	Task<string>	 getStringTask	 = client.GetStringAsync("hVp://msdn.microsod.com");	
  	
  	DoIndependentWork();	
	
  	string	  urlContents	  =	  await	  getStringTask;	
  	
  	return	urlContents.Length;	
   }

這種方式有一個問題需要特別注意,就是對於只標識async關鍵字的(指在方法內沒有出現await關鍵字)的方法,調用線程會把 該方法當成同步方法一樣執行,所以還是會堵塞GUI線程,只有當async和await關鍵字同時出現,該方 法才被轉換爲異步方法處理。


        第三種爲HttpClient和WebClient,HttpWebRequest有一些區別:

1、在HttpClient實例上配置擴展,設置默認的頭部,取消未完成的請求和更多的設置。    

 2、你通過一個單一的HttpClient實例,它有自己的連接池。    

 3、HttpClients不與特定的HTTP服務器綁定,你可以使用相同的HttpClient實例提交任 何HTTP請求。    

4、你可以用HttpClient爲特定的站點創建特殊的Client    

5、HttpClient採用新的型模式處理異步請求使它更容易管理和協調更多的請求


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章