gpt4 book ai didi

c# - 如何复制 HttpContent 异步和可取消?

转载 作者:太空狗 更新时间:2023-10-29 17:37:56 27 4
gpt4 key购买 nike

我正在使用 HttpClient.PostAsync() 并且响应是 HttpResponseMessage。它的 Content 属性是 HttpContent 类型,它有一个 CopyToAsync() 方法。不幸的是,这是不可取消的。有没有办法将响应复制到 Stream 并传递 CancellationToken

我没有被 CopyToAsync() 困住!如果有解决方法,那会很好。比如读取几个字节,检查是否取消,继续读取等等。

HttpContent.CreateContentReadStreamAsync() 方法看起来像是一个候选方法。不幸的是,它不适用于我选择的个人资料。也不清楚它是否会一次性读取所有数据并浪费大量内存。

注意:我在针对 WP8、Windows Store 8、.NET 4.5、Xamarin.iOS 和 Xamarin.Android 的 PCL 中使用它

最佳答案

我相信这应该有效:

public static async Task DownloadToStreamAsync(string uri, HttpContent data, Stream target, CancellationToken token)
{
using (var client = new HttpClient())
using (var response = await client.PostAsync(uri, data, token))
using (var stream = await response.Content.ReadAsStreamAsync())
{
await stream.CopyToAsync(target, 4096, token);
}
}

请注意,ReadAsStreamAsync 会调用 CreateContentReadStreamAsync,它对于流响应只返回基础内容流,而不会将其缓冲到内存中。

关于c# - 如何复制 HttpContent 异步和可取消?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902488/

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