[英]C#/XAML HTTPclient/webrequest GET with await never ends
为什么此HTTPHandler不起作用? getPageBody和getPageContent都永远等待着,永远不会回到我身边。 等待之后(使用断点)没有其他任何反应。
任何帮助将不胜感激!
PS:在浏览器中访问页面确实可以工作-因此问题必须在C#端。
public class HTTPHandler
{
public static async Task<List<String>> getPageBody(String page)
{
WebRequest request = WebRequest.Create(
"http://www.mywebsite.com/dev/api/" + page);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = await request.GetResponseAsync();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
//reader.Close();
//response.Close();
return responseFromServer.Split(';').ToList();
}
public static async Task<List<String>> getPageContents(String page)
{
HttpClient client = new HttpClient();
Task<HttpResponseMessage> resp;
await (resp = client.GetAsync("http://www.mywebsite.com/dev/api/" + page)).ContinueWith(
(getTask) =>
{
getTask.Result.EnsureSuccessStatusCode();
});
//HttpResponseMessage resp = await client.GetAsync("http://mywebsite.com/dev/api/" + page);
Task<String> responseBodyAsText = resp.Result.Content.ReadAsStringAsync();
responseBodyAsText.Wait();
return responseBodyAsText.Result.Split(';').ToList();
}
}
我怀疑在您的调用堆栈的Task.Wait
,您正在使用Task.Wait
或Task.Result
。
如果在async
代码上使用“ Wait
或“ Result
”,则存在死锁的风险。 我将在我的博客和最近的MSDN文章中对此进行更详细的说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.