【发布时间】:2013-12-03 23:13:07
【问题描述】:
我被困住了,几天来一直在努力解决这个问题,希望能提供帮助。
我正在调用一个 http 服务,该服务在执行时将启动一个进程,该进程将发送回多个状态消息。数据以 Json 字符串的形式返回,然后将其反序列化为对象。
我尝试创建的代码已经作为 COM 对象存在于 NPAPI 浏览器插件中,但是由于 Google 最近决定终止此类插件,我不得不寻找一种新方法来获取我的数据。
到目前为止,我已经用我的工作代码制作了令人惊叹的瑞士奶酪,并且能够返回第一个结果,仅此而已。这是我工作的一个sn-p,基本前提是该服务被称为异步,然后结果被循环,直到我得到最终的状态结果。不幸的是,我知道这是不对的,因为在第二次迭代时出现连接终止错误。
var httpClient = new HttpClient();
await httpClient.GetAsync(url).ContinueWith(
(task) =>
{
do
{
var response = task.Result;
var data = response.Content.ReadAsStringAsync().ContinueWith(
(readTask) =>
{
var data2 = readTask.Result;
foo++;
});
}while (foo < 5);
});
有人有什么建议吗?感谢您的帮助!
编辑
根据 svick 的要求,这里有更多信息。正如我所说,正在执行的代码会返回多个状态消息。所以我可能会收到 0% 完成、5%、20%、25% 等一直到 100% 的消息。我正在尝试做的是捕获所有返回的消息,直到我收到消息说状态已 100% 完成。
我也尝试过使用 ReadAsStringAsync 方法,它只返回第一条状态消息,然后关闭连接。
再次感谢!
更新 好吧,事实证明我一直在做这一切都错了。显然,服务中内置了一个结果调用,我可以查询以获取我想要的数据。我想我错过了架构会议的那一部分。
感谢所有评论或查看此内容的人!
【问题讨论】:
-
如果我正确理解了您的代码,您会提出请求,然后尝试阅读响应 5 次。这没有任何意义,你能解释一下你的代码到底应该做什么吗?
-
使用 Fiddler 或消息分析器检查原始代码,看看它在做什么。根据您的描述,听起来
ReadAsStringAsync会等到它得到所有响应。
标签: c# httpclient async-await