C#:在C#4.5中等待请求完成
我的asp.net 4.0应用程序中有一个http请求。我希望线程在继续之前等待C#:在C#4.5中等待请求完成,c#,C#,我的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<string> re
HttpClient client = new HttpClient();
HttpResponseMessage responseMsg = client.GetAsync(requesturl).Result;
// I would like to wait till complete.
responseMsg.EnsureSuccessStatusCode();
Task<string> responseBody = responseMsg.Content.ReadAsStringAsync();
HttpClient=newhttpclient();
HttpResponseMessageResponseMsg=client.GetAsync(requesturl).Result;
//我想等到完成。
responseMsg.EnsureSuccessStatusCode();
Task responseBody=responseMsg.Content.ReadAsStringAsync();
调用.Wait(),在4.5中的ResponseBy任务上(标题上是这样写的),您可以使用async/Wait
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(),但更好的选项是使用async
public async void GetData()
{
using(HttpClient client = new HttpClient())
{
var responseMsg = await client.GetAsync(requesturl);
responseMsg.EnsureSuccessStatusCode();
string responseBody = await responseMsg.Content.ReadAsStringAsync();
}
}
}这可以使用和来完成,如下所示:
// 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<string> responseBody = responseMsg.Content.ReadAsStringAsync();
// ... other code ...
}
//由于此方法是异步方法,因此它将作为
//一旦出现等待声明。
公共异步void MyMethod()
{
//…其他代码。。。
HttpClient=新的HttpClient();
//使用async关键字,此方法中的任何内容
//将等到client.GetAsync返回之后。
HttpResponseMessageResponseMsg=await client.GetAsync(requesturl).Result;
responseMsg.EnsureSuccessStatusCode();
Task responseBody=responseMsg.Content.ReadAsStringAsync();
//…其他代码。。。
}
请注意,await关键字不会阻止线程。相反,在异步方法的其余部分排队后,控制权将返回给调用方,以便它可以继续处理。如果您需要调用
MyMethod()
的调用方也等待client.GetAsync()完成,那么最好使用同步调用。您是否尝试使用同步方法(而不是异步方法)?它是.NET 4.5()。Robert的回答是正确的。我不太理解你的问题,但是如果你调用.result,它应该会阻塞线程,直到它正确完成为止?你也可以使用wait将responseBody作为字符串检索。您还应该使用一个using BLOCK来处理客户端,这是一个很好的观点。我想这就是我在没有添加任何内容的情况下发布不完整代码的结果。