Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:在C#4.5中等待请求完成_C# - Fatal编程技术网

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

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

我的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> 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来处理客户端,这是一个很好的观点。我想这就是我在没有添加任何内容的情况下发布不完整代码的结果。