在異步編程中,經常會調用已經寫好的異步方法。這時會有一個需求:根據異步方法的返回值,做一些別的操作。
1.0 重新開啟一個異步方法,在這個新的異步方法內部,調用需要請求的異步方法。示例:
1 static void Main(string[] args) 2 { 3 Console.WriteLine("--------------程序運行開始-----------"); 4 5 PostAsync(); 6 7 Console.WriteLine("--------------程序運行結束-----------"); 8 9 Console.Read(); 10 } 11 12 //異步http請求 13 public async static void PostAsync() 14 { 15 HttpWebResponse httpRes = (HttpWebResponse)await PostData(); 16 17 if (httpRes.StatusCode == HttpStatusCode.OK) 18 { 19 var text = new StreamReader(httpRes.GetResponseStream()).ReadToEnd(); 20 21 Console.WriteLine("web請求完成,在這里可以處理完成后的業務!"); 22 } 23 } 24 /// <summary> 25 /// 這個方法之所以單獨寫出來是因為:通常開發的時候我們不會單獨的寫一個web請求,而是會對請求進一步封裝,比如請求地址,請求方法 26 /// </summary> 27 /// <returns></returns> 28 public async static Task<WebResponse> PostData() 29 { 30 string url = "http://www.baidu.com"; 31 32 var httpReq = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); 33 34 return await httpReq.GetResponseAsync(); 35 }
1.1 運行結果:
1.2 很明顯,這種調用方式才發揮了異步方法的作用。即不會阻塞當前線程的執行。