【问题标题】:Async/Await maximum number of concurrent http requestsAsync/Await 最大并发 http 请求数
【发布时间】:2015-05-01 00:07:35
【问题描述】:

当 Async/Await 发出 http 请求时(例如使用 HttpClient),是否默认内置任何限制?

this 之类的问题暗示将打开无限数量的连接。我的应用在循环中执行一批 http 请求,似乎限制在大约 50 个 TCP 连接。

我最初担心我需要添加 SemaphoreSlim 来进行节流,但 .NET 似乎为我这样做了。 任何人都可以对此有所了解吗?

【问题讨论】:

  • 每台服务器限制为 2 个连接。您是否连接到相同的服务器?
  • 是的,在这种情况下,我在批量加载场景中反复访问同一个端点。我知道 Web 浏览器传统上具有这 2 个连接限制,但 .NET 也强制执行它?它是如何工作的?
  • Yes.

标签: c# async-await


【解决方案1】:

.Net 框架中的连接存在限制。例如这个ServicePointManagerDefaultConnectionLimit 这允许你限制并发操作。

但是,我不建议将其用于节流。如果您需要控制您的请求,您应该使用SemaphoreSlim,特别是WaitAsync,因为您在async-await 环境中并且这些请求是IO 绑定的(并且很长)。

使用SemaphoreSlim.WaitAsync 意味着您不会阻塞并且异步等待,这对于任何其他非async 节流机制都是如此。此外,您不希望在完成操作之前开始操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多