Раздел: как добавить ожидание после каждого разделаC#

Место общения программистов C#
Anonymous
Раздел: как добавить ожидание после каждого раздела

Сообщение Anonymous »

У меня есть API, который принимает 20 запросов в минуту, после этого мне нужно подождать 1 минуту, прежде чем отправлять запрос. У меня есть список элементов (обычно более 1000), сведения о которых мне нужно запросить у API. Я подумал, что могу использовать Partitioner, чтобы разделить мой список на 20 элементов/запросов, но вскоре я понял, что Partitioner > так не работает, моя вторая мысль заключалась в добавлении задержки в раздел, но это тоже плохая идея, насколько я понимаю, она добавляет задержку после каждого запроса, которая не нужна, вместо этого мне нужна задержка после каждого раздела. Ниже мой код:

Код: Выделить всё

public static async Task ForEachAsync(this IEnumerable source,
int degreeOfParallelism, Func body, CancellationToken token,
[Optional] int delay)
{
var whenAll = await Task.WhenAll(
from partition in Partitioner.Create(source).GetPartitions(degreeOfParallelism)
select Task.Run(async delegate {
var allResponses = new List();
using (partition)
while (partition.MoveNext())
{
allResponses.Add(await body(partition.Current));
await Task.Delay(TimeSpan.FromSeconds(delay));
}
return allResponses;
}, token));
return whenAll.SelectMany(x => x);
}
Кто-нибудь знает, как это сделать?

Подробнее здесь: https://stackoverflow.com/questions/658 ... -partition

Вернуться в «C#»