gpt4 book ai didi

c# - HttpClient GetAsync挂起

转载 作者:太空狗 更新时间:2023-10-29 22:22:44 25 4
gpt4 key购买 nike

我在我的两个 WP8 应用程序中使用了相同的方法。给定相同的 url 和相同的设备,该方法适用于一个应用程序,但不适用于另一个应用程序。在失败的应用程序中,调用 GetAsync 后挂起。没有超时,没有异常(exception)。

这是有问题的方法。

    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 中引用的正确属性吗?

这是一个测试 url "http://www.rei.com/pix/common/REI_logo.gif "

最佳答案

Calling Result or Wait can cause deadlocks ,正如我在我的博客上解释的那样。

解决这个问题的正确方法是使用await。我假设您出于某种原因想要同步阻塞,但最好使用 await 并找到一种方法使其在您的代码中工作。

关于c# - HttpClient GetAsync挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com