0
C# .Net4.0에서 스레딩 프로그램을 작성 중이며 문제가 발생했습니다.모든 스레드 완료 처리 대기 각 WebRequest
스레드 풀과 콜백을 사용하고 있습니다. 아래는 Main()의 코드입니다.
string[] urls = { url1, url2, url3, url4 };
callBack = new WaitCallback(PooledFunc);
for (int i = 0; i < urls.Length; i++)
ThreadPool.QueueUserWorkItem(callBack, urls[i]);
나는 또한 내가 거기에 몇 가지 테스트 인쇄를 넣어 URL을
static void PooledFunc(object url)
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream Answer = response.GetResponseStream();
// Display the status.
Console.WriteLine(response.Headers);
StreamReader _Answer = new StreamReader(Answer);
string content = _Answer.ReadToEnd();
Console.WriteLine(content);
}
에서 응답을 얻을 것이다 기능이 있고, 위의 코드로, 프로그램이 보인다는 모든 스레드를 시작 싶지만 종료 모두가 통과하기 전에, 그리고 매번 다른 것이 었습니다.
for 루프 뒤에 Console.ReadLine();
을 넣으면 모든 스레드가 완료 될 때까지 기다리는 것처럼 보입니다.
질문 : 모든 스레드가 완료 될 때까지 기다릴 수있는 방법이 있습니까? Console.ReadLine();
을 사용하지 않고 다음 단계로 진행 하시겠습니까?
리드 - 감사합니다 @
이것은 또한 당신이
PooledFunc
선언 좋네요을 유지할 수 있습니다! 이것은 완벽하게 작동합니다! 다른 질문을 던지면 더 많은 스레드 (또는 병렬)를 여는 데 상당한 단점이 있습니까? 중첩 된/recursinve처럼? 예를 들어, 그 (4) url 아래에서 다중 URL 열기 – sora0419@ sora0419 각 스레드에 오버 헤드가 있습니다. 스레드가 너무 많으면 오버 헤드를 추가하고 이익을 얻을 수 없습니다. "병렬"및 이와 유사한 도구 파티션을 통해 균형을 조정할 수 있습니다. –