编码员们好,我有一个程序,我需要从 Excel 文件中提取 1500 个组件的列表,然后向其特定的分销商发出 api 请求。问题是每个 API 每分钟都有最大请求量,所以我需要一种方法让它等待 60 秒然后继续,而不会明显阻塞主线程。 这是我用来发出请求的代码。
if (components[0] == "Mouser" && part != components[0]) //If 1st value of components list is "Mouser"
//POST REQUEST TO SEARCH BY MOUSERPARTNUMBER
{
if (countMouser >= 30)
{
Thread.Sleep(60000);
}
string search_api_key = "my_api_key_is_here";
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
string _partNumber = val;
var request = new HttpRequestMessage(HttpMethod.Post, $"https://api.mouser.com/api/v1/search/partnumber?apiKey={search_api_key}");
request.Content = new StringContent($@"{{
""SearchByPartRequest"": {{
""mouserPartNumber"": ""{_partNumber}"",
""partSearchOptions"": ""string""
}}
}}");
request.Content.Headers.ContentType.MediaType = "application/json";
var response = await client.SendAsync(request, CancellationToken.None);
result = await response.Content.ReadAsStringAsync();
考虑每个组件列表都以经销商名称开头,在本例中为“Mouser”,后面是完整的零件号列表。 每分钟的最大请求量是 30。所以在这部分中我想停止 for 循环 60 秒,但不是整个程序。我该怎么做?
if (countMouser >= 30)
{
Thread.Sleep(60000);
}
我考虑过使用不同的线程,但我不知道该怎么做。
它与
await Task.Delay(60000)
一起工作正常,但我的错误是每次达到最大请求时没有将计数器重置为0。
那么问题就结束了,谢谢大家的评论。