【发布时间】:2019-04-27 01:43:07
【问题描述】:
我正在查询一个 API,它对您每秒可以执行的查询数量有限制。例如,您可能被允许每秒进行 20 次查询。如果您过度查询服务器,您会收到一个 429 错误,这会阻止您访问 API。
问题来自我的代码中的 foreach 循环,其中代码的每次迭代都需要查询 API。有没有办法在限制中进行编码,以便 foreach 只会在设定的时间限制内查询一定次数,这样我就不会达到 API 的查询限制?或者换句话说,我可以让我的 foreach 循环以每秒 20 次或任何其他次数的速度迭代吗?
foreach 循环在下面,如果您想查看它,但我认为您不需要它来回答问题。
foreach(var item in matchlistd)
{
var response2 = client.GetAsync($@"https://na1.api.riotgames.com/lol/summoner/v4/summoners/by-name/{item.summonerName}apikeyiswhatgoesintherestofthispartoftheapi).Result;
if (response2.IsSuccessStatusCode)
{
var content2 = response2.Content.ReadAsStringAsync().Result;
summonerName player = JsonConvert.DeserializeObject<summonerName>(content2);
accountinfo.Add(player);
}
}
【问题讨论】:
-
使用计时器。这不是循环的工作
-
您的 API 密钥已经泄露,请确保重新生成它。
-
@phuclv 我不知道计时器类。将对此进行调查。
-
要在循环中计算这个,您必须准确知道每个请求花费了多长时间,这意味着您必须能够保证您和服务器之间的延迟永远不会改变。单个条件的任何微小差异都意味着您的循环失败。这意味着循环在这里不是合适的方法。
-
.Result有潜在危险可能导致死锁。
标签: c# loops dotnet-httpclient