C#:等待C#4.5完成请求

我的asp.net 4.0应用程序中有一个http请求。 我希望线程在继续之前等待。

HttpClient client = new HttpClient(); HttpResponseMessage responseMsg = client.GetAsync(requesturl).Result; // I would like to wait till complete. responseMsg.EnsureSuccessStatusCode(); Task responseBody = responseMsg.Content.ReadAsStringAsync(); 

在responseBody Task上调用.Wait()

在4.5(你的标题是这样)你可以使用async/await

 public async void MyMethod() { HttpClient client = new HttpClient(); HttpResponseMessage responseMsg = await client.GetAsync("http://www.google.com"); //do your work } 

要下载字符串,您只需使用即可

 public async void Question83() { HttpClient client = new HttpClient(); var responseStr = await client.GetStringAsync("http://www.google.com"); MessageBox.Show(responseStr); } 

一种选择是调用.Wait(),但更好的选择是使用异步

 public async void GetData() { using(HttpClient client = new HttpClient()) { var responseMsg = await client.GetAsync(requesturl); responseMsg.EnsureSuccessStatusCode(); string responseBody = await responseMsg.Content.ReadAsStringAsync(); } } 

}

这可以使用async关键字和await关键字来完成,如下所示:

 // Since this method is an async method, it will return as // soon as it hits an await statement. public async void MyMethod() { // ... other code ... HttpClient client = new HttpClient(); // Using the async keyword, anything within this method // will wait until after client.GetAsync returns. HttpResponseMessage responseMsg = await client.GetAsync(requesturl).Result; responseMsg.EnsureSuccessStatusCode(); Task responseBody = responseMsg.Content.ReadAsStringAsync(); // ... other code ... } 

请注意,await关键字不会阻止该线程。 相反,在异步方法的其余部分排队后,控制权将返回给调用者,以便它可以继续处理。 如果你需要MyMethod()的调用者也等到client.GetAsync()完成,那么你最好使用同步调用。