HttpClient (C#) 在许多异步请求上失败?

2023-11-21

我正在使用 HttpClient 向外部 api 异步发出许多请求。我等待所有请求完成,然后在其他代码中使用响应。我的问题是,如果我发出太多请求,当我使用 Task.WhenAll 等待时,我的代码会引发异常。

该代码最终将并行运行,这意味着我将同时执行多组异步请求(即 10 组 200 个异步请求)。我已经实例化了一个与 .NET 4.5 async/await 修饰符一起使用的 HttpClient,如下所示:

using (var client = new HttpClient())
{
    // make a list of tasks
    List<Task<HttpResponseMessage>> taskList;
    List<MyData> replies;
    for (int i = 0; i < MAX_NUMBER_REQUESTS; i++)
    {
        taskList.Add(client.GetAsync(externalUri);
    }

    List<HttpResponseMessage> responses = await Task.WhenAll(taskList);

    // read each response after they have returned
    foreach (var response in responses)
    {
        var reader = new System.IO.StreamReader(await response.Content.ReadAsStreamAsync());
        replies.Add(JsonConvert.DeserializeObject<MyData>(reader.ReadToEnd()));
        reader.Close();
} 

    foreach (var reply in replies)
    {
        // do something with the response from the external api call...
    }
}

我不断收到 TaskCanceledException。经过研究后,我发现这可能是一个超时问题。我不知道如何解决它。在使用 Task.WhenAll 并重复之前,我尝试将我的请求批量处理为 100 个请求,这有效。然后,当我并行运行三组 100 个请求时,失败了。我错过了什么吗,有人对此有任何见解吗?


Adjust ServicePointManager.DefaultConnectionLimit。对于海量并发请求,只需设置为int.MaxValue.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpClient (C#) 在许多异步请求上失败? 的相关文章

随机推荐

  • 如何解决 python 中的未来警告 -> % (min_groups, self.n_splits)), warning) ?

    当我在程序中运行mean acc 方法时 出现 min groups self n splits 警告 错误 def mean acc models RandomForestClassifier n estimators 200 max d
  • 相机 ISO 设置/快门速度

    我正在寻找一种方法来改变我的 Evo 4G 相机的感光度 我知道这不是相机的快门速度 因为它是数码相机 下一个最相关的方面是 ISO 设置 但 Android SDK 没有办法操作它 有人知道另一种选择吗 即场景模式 曝光或效果 param
  • 如何将UTF8字符串转换为字节数组?

    The charCodeAt函数返回字符的 unicode 代码 但我想获取字节数组 我知道 如果字符码超过 127 则该字符存储在两个或更多字节中 var arr for var i 0 i
  • 为什么 VBA 中的每个类都有一个 Application 属性?

    我想澄清一下为什么每堂课 或几乎每个班级 在 VBA 中 当您滚动浏览对象浏览器时 有一个Application财产 MSDN 说 当不带对象限定符使用时 此属性返回一个 代表 Microsoft Excel 应用程序的应用程序对象 当与对
  • url重写后如何知道原来的url?

    我有 url 重写规则 将 www domain2 com 重定向到 domain1 com 根目录下的子文件夹 我们将此文件夹称为子项目 在我的控制器中 我需要构造一个指向原始未修改路径的 URL 但 Request Url 属性 如 A
  • 如何回滚特定迁移?

    我有迁移文件 db migrate 20100905201547 create blocks rb 我如何具体回滚该迁移文件 rake db rollback STEP 1 如果您要回滚的迁移是最后应用的迁移 这是一种执行此操作的方法 您可
  • 在不同端口上启动瘦服务器

    我是个新手哦 我有一个 ruby on Rails 应用程序 今天我可以通过命令正常启动应用程序 sudo thin start d 我们创建了一个新的测试数据库 一个是干净的数据库 另一个用于测试 因此可能会弄乱 在database ym
  • 使用seaborn clustermap提取层次聚类中的簇行

    我正在使用seaborn clustermap 中的分层聚类来对我的数据进行聚类 这可以很好地可视化热图中的集群 但是 现在我想提取分配给不同集群的所有行值 这是我的数据的样子 import pandas as pd load DataFr
  • 有没有比 fread() 更快的方法来读取大数据?

    嗨 首先我已经在堆栈和谷歌上搜索并找到了这样的帖子 快速读取非常大的表作为数据框 虽然这些很有帮助并且得到了很好的回答 但我正在寻找更多信息 我正在寻找读取 导入高达 50 60GB 的 大 数据的最佳方法 我目前正在使用fread 函数来
  • Qt如何更改特定QComboBox项目的突出显示颜色

    我正在尝试使 QComboBox 的突出显示透明 此 QComboBox 的颜色也会根据所选索引而变化 这是迄今为止我最好的解决方案 switch comboBox gt currentIndex case 0 comboBox gt se
  • 将两个内联块左右对齐在同一行上

    如何对齐两个内联块 使一个位于左侧 另一个位于同一行的右侧 为什么这么难 有没有像 LaTeX 的 hfill 这样的东西可以消耗它们之间的空间来实现这一点 我不想使用浮动因为使用内联块我可以排列基线 当窗口对于它们两个来说都太小时 使用内
  • 没有这样的文件来加载 Rails 3 的捆绑程序错误

    我有一个 Rails 3 应用程序可供部署 我还没有设置 VPS 主机 因为我计划在前几个月将所有内容都放在共享主机上 Problem cd myapp 捆绑检查 结果 The Gemfile s dependencies are sati
  • 将 HDD Serial # VB6 代码转换为 VB.NET 代码

    我从 VC 项目中获取了一段很酷的代码 它无需使用 WMI 即可获取硬盘驱动器的完整信息 因为 WMI 有其自身的问题 我请求那些熟悉 API 函数的人尝试将这个 VB6 代码转换为 VB NET 或 C 并帮助很多非常需要这个实用程序类的
  • 如何从 CLI 解释器准备语句?

    如何从 SQLite CLI 准备一条语句 我已经找到页面了编译 SQL 语句但它更适合 ODBC 接口 而不是 CLI 解释器 我希望得到类似于以下内容的东西 sqlite gt pq prepare SELECT FROM Users
  • 持久连接不适用于 codeIgniter 中的 mysql 驱动程序

    我的本地开发环境中有这个数据库配置 db default hostname localhost db default username Actual username is put inside these quotes db defaul
  • C++,概念不适用于无符号整数作为结果类型?

    我正在玩concepts我试图定义一个concept这需要任何non type parameter和函数isUnsignedInt检查参数是否为unsigned int 使用required关键字后跟concept 问题是 我可以传递一个负
  • 如何通过角度2中的函数触发输入类型=“文件”的事件点击?

    我在 Html 文件中有这段代码
  • “debug = require('debug')('api:server')”是什么意思

    我正在阅读一个项目的一些代码来学习 Node js 然后我发现了这一行 debug require debug api server 括在括号内 由于我是编程新手 当我不知道某件事时 我只是在网上搜索它 但我找不到这个问题的答案 如果您要告
  • 在Java中将int数组的内容复制到double数组?

    我正在尝试将 int 数组的内容复制到 double 类型的数组中 我必须先投射它们吗 我成功地将一个 int 类型的数组复制到另一个 int 类型的数组 但是现在我想编写从数组复制内容的代码A到数组Y 整数到双倍 这是我的代码 publi
  • HttpClient (C#) 在许多异步请求上失败?

    我正在使用 HttpClient 向外部 api 异步发出许多请求 我等待所有请求完成 然后在其他代码中使用响应 我的问题是 如果我发出太多请求 当我使用 Task WhenAll 等待时 我的代码会引发异常 该代码最终将并行运行 这意味着