我需要一个组件/类来限制某些方法的执行到N秒内的最大M次调用(或ms或nanos,无关紧要).
换句话说,我需要确保我的方法在N秒的滑动窗口中执行不超过M次.
如果您不知道现有的课程,请随时发布您的解决方案/想法如何实现这一点.
我有以下异步代码从我的项目中的很多地方调用:
public async Task<HttpResponseMessage> MakeRequestAsync(HttpRequestMessage request)
{
var client = new HttpClient();
return await client.SendAsync(request).ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
如何调用上述方法的示例:
var tasks = items.Select(async i =>
{
var response = await MakeRequestAsync(i.Url);
//do something with response
});
Run Code Online (Sandbox Code Playgroud)
我正在击中的ZenDesk API允许每分钟大约200个请求,之后我收到了429错误.如果我遇到429错误,我需要做一些Thread.sleep,但是使用async/await,并行线程中可能会有很多请求等待处理,我不知道怎么能让所有人都睡不着持续5秒左右,然后再次恢复.
解决这个问题的正确方法是什么?我想听听快速解决方案以及良好的设计解决方案.