簡體   English   中英

帶有等待的C#/ XAML HTTPclient / webrequest GET永遠不會結束

[英]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.WaitTask.Result

如果在async代碼上使用“ Wait或“ Result ”,則存在死鎖的風險。 我將在我的博客最近的MSDN文章中對此進行更詳細的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM