В винде стоит ограничение на количество одновременно открытых tcp соединений.
Почитать вики:
goo.gl/osI2h6
Один из варинтов фикса:
half-open.com/home_ru.htm
Я точно не уверен, но можно попробовать не создавать каждый раз WebClient, а создать один, и давать ему асинхронные таски на загрузку файлов.
И какой смысл делать так?
new Thread(()=> webClient.DownloadFileAsync(uri, file))
потому что
webClient.DownloadFileAsync(uri, file)
уже возвращает вам запущенный отдельный потоке по загрузке файла
у вас выходит -> создать новый поток, в котором создаётся новый поток выполняющий задачу.
используйте просто последний вариант.