0

为什么这个 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();
    }
}
4

1 回答 1

0

我怀疑在您的调用堆栈中,您正在使用Task.Waitor Task.Result

如果您在代码上使用Wait或,您将面临死锁的风险。我在我的博客最近的 MSDN 文章中对此进行了更详细的解释。Resultasync

于 2013-04-27T11:50:54.390 回答