我的两个 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 ”