我正在试图弄清楚如何有效地使用每秒限制为5个请求的API,而不会达到限制。如果请求达到限制,我将从API获得错误响应。 Thread.Sleep(200)感觉不是一个合适的解决方案,因为我需要效率。
foreach (Foo foo in fooList)
{
try
{
// Max 5 API calls per second! How?
ThirdPartyResponse response = ContactThirdPartyApi(foo);
// do something with response
...
}
}
最好我想使用某种后台工作人员进行呼叫但是如何控制每秒的请求数nr?我已经尝试过查看Hangfire来解决这个问题,但它似乎并不适用于这种类型的限制控制。
由于我可以发出请求并知道何时得到响应,因此应该可以跟踪已发射的数量和数量。完成并确保每秒不超过5次。但是怎么样?欢迎提出任何建议!
答案 0 :(得分:4)
您可以使用Semaphore
或SemaphoreSlim
限制并发请求的数量,然后您需要添加时间元素以便可以释放它。
Joel Fillmore has written a TimeSpanSemaphoreSlim
implementation合并到API调用实现中。 IIRC,我成功地将它与RestSharp结合用于以前的项目。
您可能希望稍微修改一下set the resolution of Thread.Sleep(1)
properly。