【问题标题】:HttpClient, multiple async results from single callHttpClient,单个调用的多个异步结果
【发布时间】: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


【解决方案1】:

解决方案是对我不知道存在的服务进行结果调用。我不需要弄清楚如何做我上面描述的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多