HttpClient 在 Windows Phone 上缓冲响应流
HttpClient buffers response stream on Windows Phone
我使用的是最新的HttpClient(portable)库,下载文件,代码如下:
var httpClient = new HttpClient();
var request = new HttpRequestMessage(method, _path);
var operation = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var stream = await operation.Content.ReadAsStreamAsync();
do
{
var read = await stream.ReadAsync(buffer, 0, 4096);
ReportProgress(...);
(...)
} while (...);
在 Windows Phone 上,ReadAsync 在返回之前下载所有内容,所以即使我将它配置为只读取接下来的 4096 个字节,它也会读取所有内容,然后才 returns.这里的问题是我想报告下载进度,这种行为基本上不可能,因为它只在所有内容下载后报告。
最奇怪的是,完全相同的代码在 Windows 8.1 上工作得很好,没有任何问题,它似乎是 Windows Phone 唯一的问题。
有什么想法吗?
我观察过 similar thing a while ago, this is also related。
这与 OS 有关,您可能无法轻易绕过它(我去过那里)。如果您非常需要这个,您可以尝试关注 @yasen's answer.
好消息是它已在 Windows 10 中得到更正,您的代码应该可以正常工作。
我使用的是最新的HttpClient(portable)库,下载文件,代码如下:
var httpClient = new HttpClient();
var request = new HttpRequestMessage(method, _path);
var operation = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var stream = await operation.Content.ReadAsStreamAsync();
do
{
var read = await stream.ReadAsync(buffer, 0, 4096);
ReportProgress(...);
(...)
} while (...);
在 Windows Phone 上,ReadAsync 在返回之前下载所有内容,所以即使我将它配置为只读取接下来的 4096 个字节,它也会读取所有内容,然后才 returns.这里的问题是我想报告下载进度,这种行为基本上不可能,因为它只在所有内容下载后报告。
最奇怪的是,完全相同的代码在 Windows 8.1 上工作得很好,没有任何问题,它似乎是 Windows Phone 唯一的问题。
有什么想法吗?
我观察过 similar thing a while ago, this is also related。
这与 OS 有关,您可能无法轻易绕过它(我去过那里)。如果您非常需要这个,您可以尝试关注 @yasen's answer.
好消息是它已在 Windows 10 中得到更正,您的代码应该可以正常工作。