У меня есть приложение, которое загружает URL-адреса с использованием threadPool в разных потоках, но недавно я прочитал статью ( http://www.codeproject.com/KB/IP/Crawler.aspx ), в которой говорится, что HttpWebRequest.GetResponse () работает только в одном потоке и других потоках ждет этой темы. Сначала я хочу знать, правда ли это? Как я могу отслеживать, какая из моих тем на самом деле загружается с его статусом?
Я сомневаюсь, что HttpWebRequest.GetResponse блокирует другие потоки, но вы можете легко проверить это с помощью таких инструментов, как Fiddler . Вы можете запустить скрипач и запустить свою программу. Запрос появится в Fiddler, как только ваша программа сделает это, и вы сможете быстро определить, являются ли они одновременными или поочередно.
Да, GetResponse - это блокирующий вызов (проверьте MSDN), который может возвращаться только при ответе сервера или истечении времени ожидания запроса. После этого просто проверьте код состояния и используйте GetResponseStream, чтобы начать загрузку возвращаемого контента. Примерно так:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == 200)
{
Stream content = response.GetResponseStream();
// Read the content and report the downloading progress...
...
}