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 中得到更正,您的代码应该可以正常工作。