【发布时间】:2016-08-18 23:12:18
【问题描述】:
我有一个应用程序,在将文件发布到服务器后,服务器会定期向客户端应用程序返回有关其响应中升级过程的消息。
我曾经有过类似的代码
using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse())
{
using (Stream responseStream = httpResponse.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
while(!streamReader.EndOfStream)
{
var str = streamReader.ReadLine();
// Do something with str
}
}
}
}
在更新我的代码以利用 HttpClient 类后,我正在努力寻找一种与上述代码相同的方法。
var response = client.PostAsync(uploadUrl, content).Result;
var stream = response.Content.ReadAsStreamAsync().Result;
var streamReader = new StreamReader(stream);
// Superfluous due to the fact we are already at end of stream
while(!streamReader.EndOfStream)
{
var str = streamReader.ReadLine();
// Do something with str
}
如果我尝试类似上面的方法,那么我们会等到整个流都被填充后,然后再一次返回,因为使用了response.Content.ReadAsStreamAsync().Result 调用。这不适合,因为我希望从服务器返回时实时显示信息。
当我们有一个Task<Stream> 对象时,是否可以像上面示例中那样定期从流中读取?
【问题讨论】:
标签: c# http async-await