Kru*_*lur 9 .net c# async-await dotnet-httpclient xamarin
我正在使用HttpClient.PostAsync(),响应是一个HttpResponseMessage.其Content属性是HttpContent具有CopyToAsync()方法的类型.不幸的是,这是不可取消的.有没有办法将响应复制到a Stream并传递CancellationToken?
我没有被困住CopyToAsync()!如果有解决方法,那就没问题了.就像读取几个字节一样,检查是否取消,继续阅读等等.
这些HttpContent.CreateContentReadStreamAsync()方法看起来像是候选人.不幸的是,它不适用于我选择的个人资料.还不清楚它是否会一次性读取所有数据并浪费大量内存.
注意:我在PCL中使用这个目标是WP8,Windows Store 8,.NET 4.5,Xamarin.iOS和Xamarin.Android
Ste*_*ary 15
我相信这应该有效:
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只返回基础内容流而不将其缓冲到内存中.
| 归档时间: | 
 | 
| 查看次数: | 6446 次 | 
| 最近记录: |