C# 使用httpc客户端从异步GET获取下载进度/当前下载的字节

C# 使用httpc客户端从异步GET获取下载进度/当前下载的字节,c#,asynchronous,xamarin,httpclient,C#,Asynchronous,Xamarin,Httpclient,我试图使用System.Web.Http的httpclient获得Xamarin中表示的一些下载进度。我理解在典型的情况下,通过HEAD请求提前获得文件大小,并检查相关文件的内容长度。我不明白的是如何获得当前传输的文件大小,以便将其与总大小进行比较 这可能吗?我四处寻找了其他的例子,但他们似乎在使用WebClient或其他类似的工具 编辑: 如果我像上面那样等待GetStreamAsync,那么在它完成之前,我不能对流执行任何操作。如果我删除wait并尝试处理任务结果,同样的事情也会发生——即使

我试图使用System.Web.Http的httpclient获得Xamarin中表示的一些下载进度。我理解在典型的情况下,通过HEAD请求提前获得文件大小,并检查相关文件的内容长度。我不明白的是如何获得当前传输的文件大小,以便将其与总大小进行比较

这可能吗?我四处寻找了其他的例子,但他们似乎在使用WebClient或其他类似的工具

编辑:

如果我像上面那样等待GetStreamAsync,那么在它完成之前,我不能对流执行任何操作。如果我删除wait并尝试处理任务结果,同样的事情也会发生——即使尝试获取长度也不会起作用,直到整个任务完成为止


显然,如果我能在流被写入时得到它,我就可以检查长度,并将其与头信息进行比较。但是如何访问中间传输,我不知道。

不幸的是,到目前为止,我能找到的最好的解决方案是使用Webclient而不是httpclient。我还没能在Xamarin中给Webclient一个机会,希望它能在那里工作,但我设法以一种简单的方式在PC上使用它取得了进展。

您可以使用HttpClient的GetStreamAsync异步方法并使用该流读取块。但是您将如何实现这一点?否则,我将遇到与任何其他等待的异步操作相同的问题,除非我自己编写该方法并让它更新自身以外的内容,否则在该操作完成之前,我无法获取任何内容。Joseph,当你在循环中读取流时,你知道你读取了多少字节。所以做这样的事情有什么困难:虽然…{total+=stream.Read…;}可能什么都没有,但我的印象是等待的异步流不会给我访问流本身的权限,只是在任务完成之前流不可用的任务。我将尝试你的建议。不,我目前还不能完成这项工作。因此,如果有人知道一个简单的工作示例,我将不胜感激。
submitButton.Clicked += async (object sender, EventArgs e) => {
var client = new HttpClient();

var url = (Just making use of a sizable wallpaper here as example.);

var result = await client.GetStreamAsync(url);
}