2013-11-20 2 views
1

У меня есть очень простой метод, который в основном извлекает содержимое строки из списка пройденных в URLs:операция была сделана попытка на то, что это не розетка с HttpClient

foreach (var url in urls) 
{ 
    var content = _httpClient.GetStringAsync(url).Result; 
} 

Intermittently, я получаю следующее исключение:

операция была сделана попытка на то, что не является сокетом

Я подозреваю, что я бегу из соединений? Если есть какая-то сетевая латентность (и для каждого URL-адреса требуется около секунды), я не получаю эту ошибку.

Есть ли способ предотвратить это?

+0

Привет, вы решили эту проблему? – Meryovi

ответ

0

Использование .Result может вызвать проблемы в зависимости от текущего контекста синхронизации Threading. Однако, предполагая, что .Result не вызывает проблему, существует свойство, ограничивающее количество одновременных подключений. Однако, если вы явно не установили его, иногда это фактически ничего не делает, и вы можете легко заставить HttpClient попытаться выполнить 100 одновременных запросов.

Итак, попробуйте добавить эту строку,

ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultConnectionLimit; 

Я знаю, это выглядит немым, но это будет на самом деле ограничить число одновременных подключений к 2. Это может предотвратить любые странные проблемы вы видите.

Смежные вопросы

 Смежные вопросы