【问题标题】:HttpClient buffers response stream on Windows PhoneHttpClient 在 Windows Phone 上缓冲响应流
【发布时间】:2015-11-06 06:11:47
【问题描述】:

我正在使用最新的HttpClient(便携式)库,下载文件,代码如下:

            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 个字节,它也会读取所有内容,然后才返回。这里的问题是我想报告下载进度,这种行为基本上是不可能的,因为它只在下载完所有内容后才报告任何内容。

最奇怪的是,在 Windows 8.1 上完全相同的代码运行良好,完全没有问题,它似乎是 Windows Phone 唯一的问题。

有什么想法吗?

【问题讨论】:

  • 当你要求它下载 4096 字节时它下载了多少数据?好像忽略了读取的数据?
  • 文件大小未定义,在我测试的文件中,它们都大于 1 mb。我编辑了示例。

标签: c# stream windows-runtime windows-phone-8.1 httpclient


【解决方案1】:

我观察到similar thing a while ago,这是also related

这与操作系统有关,您可能无法轻松绕过它(我去过那里)。如果你强烈需要这个,你可以尝试关注@yasen's answer

好消息是它已在 Windows 10 中得到纠正,您的代码应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多