首页 > 解决方案 > HttpClient 限制每秒数据请求数

问题描述

我需要向 REST API 端点发送请求,但有一个限制(由 API 施加)——我不能发送超过 10 MB/s。

每个请求都有一个固定的大小(为简单起见,我们假设 1 MB)。

我可以创建一个包含 10 个请求的集合并等到所有请求都完成,如果不到一秒,我会在发送另一轮请求之前等待。

这很好,我发现这个问题可以解决这个问题。

但是,我不受每秒调用次数的限制,而是每秒数据量!

这意味着如果某些请求尚未完成,它们可能仍在发送数据。这意味着我必须等待所有请求完成才能开始另一轮。

边缘情况可能是 1 个请求需要很长时间(例如 5 秒),而所有其他请求需要 0.9 秒。我可以开始另一轮 9 个请求,而 5 秒的请求需要时间来完成!

不幸的是,我发现的所有解决方案都集中在限制数据(但针对流)或请求数量上,但不是两者兼而有之。

如何确保在发送 http 请求时只使用 10 MB/s,但不会被一些比其他请求花费更长的时间才能完成的请求阻塞?

标签: c#httprequestthrottling

解决方案


推荐阅读