在异步编程中,经常会调用已经写好的异步方法。这时会有一个需求:根据异步方法的返回值,做一些别的操作。
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 很明显,这种调用方式才发挥了异步方法的作用。即不会阻塞当前线程的执行。