簡體   English   中英

HttpClient GetAsync掛起

[英]HttpClient GetAsync hanging

我在兩個WP8應用程序中使用了相同的方法。 給定相同的url和相同的設備,該方法適用於一個應用程序,但不適用於另一個應用程序。 在失敗的應用程序中,GetAsync在調用后掛起。 沒有時間,沒有例外。

這是有問題的方法。

    private async Task<Byte[]> DownloadData(string uri)
    {
        byte[] myDataBuffer = null;
        var newUri = new Uri(uri, UriKind.Absolute);
        var myWebClient = new HttpClient();

        var response = await myWebClient.GetAsync(newUri);
        if (response.Content.Headers.ContentType.MediaType == "text/plain"
            || response.Content.Headers.ContentLength < 200)
        {
            throw new Exception(await response.Content.ReadAsStringAsync());
        }
        myDataBuffer = await response.Content.ReadAsByteArrayAsync();
        return myDataBuffer;
    }

這種情況每次都發生在一個特定的應用程序上,而不是另一個。 相同的設備。 有沒有人經歷過這種行為? 網址有效,代碼相同。 是否有可能影響此項目的項目設置? 我在失敗的應用程序的另一部分使用HttpClient,它在那里工作。

我可以更改代碼以使用HttpWebRequest,並且工作正常。 只是沒有HttpClient。

我剛剛發現,如果我將方法復制到我的button_click處理程序中,它也可以在那里工作。 在單獨的類中有這個方法有問題嗎? 這對我來說似乎很奇怪。

更新

似乎打破它的是多層異步方法調用它。 我在課堂上

    public override byte[] GetImageData(string imageUri)
    {
        return GetImageDataAsync(imageUri).Result;
    }

    public async Task<byte[]> GetImageDataAsync(string imageUri)
    {
        return await DownloadData(imageUri);
    }

從我的button_click處理程序,我正在調用GetImageData(uri) 如果我改變它await GetImageDataAsync(uri)它的工作原理。

Result不是GetImageData引用的正確屬性嗎?

這是一個測試網址“ http://www.rei.com/pix/common/REI_logo.gif

正如我在博客中解釋的那樣, 調用ResultWait會導致死鎖

解決這個問題的正確方法是使用await 我假設你有一些理由想要同步阻塞,但最好是使用await並找到一種方法讓它在你的代碼中運行。

暫無
暫無

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

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