Я пытаюсь ограничить число асинхронных задач, которые я отправляю на внешний сервер базы данных. Я создал следующий тестовый код, выполнение которого должно занять 25 секунд (150 задач * 5 секунд / 30 макс. Одновременных задач = 25 секунд).
private async void ThrottlingTest()
{
TaskScheduler scheduler = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, 30).ConcurrentScheduler;
Stopwatch sw = new Stopwatch();
int numTasks = 150;
Task[] tasks = new Task[numTasks];
for (int i = 0; i < numTasks; i++)
{
tasks[i] = Task.Factory.StartNew(() => Task.Delay(5000), CancellationToken.None, TaskCreationOptions.None, scheduler).Unwrap();
}
sw.Start();
await Task.WhenAll(tasks);
sw.Stop();
long duration = sw.ElapsedMilliseconds;
}
Однако выполнение этого кода занимает всего 5 секунд, указывая, что мое регулирование не работает. Что я делаю неправильно? Я подозреваю, что Task.Delay работает с использованием планировщика по умолчанию. Если да, то с каким механизмом задержки я могу проверить?