2010-08-17 2 views
1

У меня есть приложение, которое загружает URL-адреса с помощью threadPool в разных потоках, но недавно я прочитал статью (http://www.codeproject.com/KB/IP/Crawler.aspx), в которой говорится, что HttpWebRequest.GetResponse() работает только в одном потоке, а другой потоки ждут этого потока. сначала я хочу знать, это правда? как я могу контролировать, какой из моих потоков фактически загружается с его статусом?Монитор, который загружает url

ответ

1

Я сомневаюсь, что HttpWebRequest.GetResponse будет блокировать другие потоки, но вы можете проверить, что легко использовать такие инструменты, как Fiddler. Вы можете запустить скрипач и запустить свою программу. Запрос появится в Fiddler, как только ваша программа сделает это, и вы сможете быстро определить, являются ли они одновременно или один за другим.

+0

Да Ваш комментарий instcode ответ именно то, что мне нужно знать, я бегу Фидлер, но как я могу быть уверен, что причина Скрипач не показывает, какой запрос работает в экземпляре время – Ehsan

+0

Я считаю, что ваши загрузки будут занимать не менее нескольких секунд - поэтому вы должны увидеть несколько одновременных запросов в скрипаче, доказывающих возможность параллельных запросов. В Fiddler вкладка статистики сообщит вам время начала и окончания вашего запроса, в то время как вкладка временной линии может отображать комбинированную временную линию для нескольких запросов (сеансы, называемые скрипачом) - выбор нескольких запросов на скачивание и просмотр вкладки временной линии. – VinayC

1

Да, GetResponse - это блокирующий вызов (проверьте MSDN), который может возвращаться только после ответа сервера или таймаута запроса. После этого просто проверьте код состояния и используйте GetResponseStream, чтобы начать загрузку возвращаемого содержимого. Как это:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusCode == 200) 
{ 
    Stream content = response.GetResponseStream(); 
    // Read the content and report the downloading progress... 
    ... 
} 
+0

Я не думаю, что Ehsan обеспокоен тем, что GetResponse блокирует текущий поток, он обеспокоен тем, что он блокирует вызовы GetResponse на других потоках, что делает невозможным параллельную загрузку. – VinayC