2010-08-17 2 views
1

다른 스레드에서 threadPool을 사용하여 URL을 다운로드하는 응용 프로그램이 있지만 최근에 HttpWebRequest.GetResponse()가 한 스레드에서만 작동한다는 기사 (http://www.codeproject.com/KB/IP/Crawler.aspx)를 읽었습니다. 스레드가 해당 스레드를 기다리고 있습니다. 먼저 사실인지 알고 싶습니까? 내 스레드 중 어떤 스레드가 실제로 상태와 함께 다운로드되는지 어떻게 모니터링 할 수 있습니까?어떤 스레드가 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

관련 문제