Асинхронная загрузка и обработка массива файлов из сети
Я загружаю из интернета список бинарных файлов и обрабатываю их.
Task MakeAll(Uri[] uris)
{
return Task.WhenAll(uris.Select(uri => Work(uri)).ToArray());
}
async Task Work(Uri uri)
{
var result = await Download(uri);
await HandleResult(result);
}
В методе "Download" я использую HttpClient c TokenBucketRateLimiter для ограничения скорости запросов.
var options = new TokenBucketRateLimiterOptions()
{
TokenLimit = 1,
QueueProcessingOrder = QueueProcessingOrder.OldestFirst,
QueueLimit = 1000,
ReplenishmentPeriod = TimeSpan.FromSeconds(4),
TokensPerPeriod = 1,
AutoReplenishment = true
};
Суть в том, что при таких настройках запросы на сервер происходят примерно раз в 10 сек. Но я не понимаю почему так медленно. Я не хорошо разбираюсь в асинхронном программировании.
Что мне нужно сделать, что бы файлы скачивались, как только появляется свободный токен, а обработка была второстепенной задачей?
Источник: Stack Overflow на русском