我在为Windows Phone 8.1开发的应用程序中遇到了一个问题,它的工作正常,但在Windows Mobile 10中,它仍然停留在GetAsync上。它不会抛出异常或任何东西,只是卡在那里无休止地等待。响应的内容长度为22014030字节。
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
{
response.EnsureSuccessStatusCode();
using (HttpContent content = response.Content)
{
return await content.ReadAsStringAsync();
}
}
}
我也尝试将其作为流阅读,但是一旦我尝试阅读内容正文,就不会再发生任何事情了。
调用此函数的代码声明为:
public async Task<List<APIJsonObject>> DownloadJsonObjectAsync()
{
string jsonObjectString = await DownloadStringAsync(Constants.URL);
if (jsonObjectString != null && jsonObjectString.Length >= 50)
{
List<APIJsonObject> result = await Task.Run<List<APIJsonObject>>(() => JsonConvert.DeserializeObject<List<APIJsonObject>>(jsonObjectString));
return result;
}
return null;
}
答案 0 :(得分:0)
它被阻止的原因是因为你得到一个巨大的响应(20.9MB)HttpClient
会在给你一个结果之前尝试下载。
但是,您可以告诉HttpClient
在从服务器读取响应标头后立即返回结果,这意味着您可以更快地获得HttpResponseMessage
。为此,您需要将HttpCompletionOption.ResponseHeadersRead
作为参数传递给SendRequestAsync
HttpClient
方法
以下是:
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("GET"), url))
{
using (var response = await client.SendRequestAsync(request, HttpCompletionOption.ResponseHeadersRead)
{
//Read the response here using a stream for example if you are downloading a file
//get the stream to download the file using: response.Content.ReadAsInputStreamAsync()
}
}
}