У меня такая же проблема. Я пробую VS2010 Pro, и я сделал небольшой домашний проект, где я загружаю несколько файлов (10-50) одновременно, и я хочу ограничить пропускную способность для всех них. Я нашел эту публикацию, но я не могу найти решение, поэтому я попробовал для себя.
Я создал класс DownloadLimiter, который построен очень просто. Каждый раз, когда Загрузчик хочет загрузить чанк (например, непосредственно перед InputStream.Read ()), он должен запросить у DownloadLimiter пропускную способность. У него есть переменная, которая содержит ограничение, например, 50 000 (например, bytesPerSecond) и availableBandwidthPerSecond, которая уменьшается при обработке и возврате каждой функции ask ().
Он также содержит таймер, который сбрасывает имеющуюся полосу пропусканияPerSecond до ограничения каждые 1000 мс.
Метод ask () заблокирован, поэтому, если на данный момент нет доступной пропускной способности, он просто зацикливается и спит некоторое время, пока таймер не сбросит доступную пропускную способность.
Работает отлично, однако. Есть проблема. Допустим, у вас довольно быстрое соединение (100 мегабит), и вы установили ограничение в 200 КБ. Если вы загрузите один файл (из аналогичного быстрого соединения), то вы достигнете пика в 100 мегабит за x миллисекунд, а затем он будет ждать, пока доступная пропускная способность не будет сброшена. И это будет продолжаться, пока файл не будет завершен. Средняя скорость загрузки будет достаточно равномерной, но если вы посмотрите график пропускной способности, он будет иметь пики каждую секунду.
Я полагаю, что опубликованная ссылка на ThrottledStream работает с пиком точно так же.
Я не знаю, помог ли вам текст выше ... Если кому-то интересно, я могу выложить код где-нибудь, чтобы вы могли прочитать. Было бы неплохо с некоторой оптимизацией (если вы хотите), так как я еще не так хорошо знаком с многопоточностью. :)