저는 ThreadPools, Tasks 및 Threads에 대해 많이 읽었습니다. 잠시 후 나는 모든 것을 꽤 혼란스러워했다. 각각에 대해 부정적인/긍정적 인 말을하는 사람들이 많습니다. 누군가 내 문제에 대한 해결책을 찾도록 도울 수 있습니다. 나는 여기 저기에 내 요점을 이해하기 위해 간단한 다이어그램을 만들었습니다. 기본적 왼쪽C# 한 번에 여러 웹 요청을 처리하는 방법
5 개 스트링의 목록 (URL의) 처리 될 필요가있다. 센터에서 진행 상황을 추적하기위한 2 가지 이벤트가있는 핸들러에 대한 제 생각입니다. 그 핸들러 안에는 5 개의 URL 모두가 파란색으로 표시된 별도의 태스크를 생성합니다. 각각 하나씩 완료되면 각자 웹 페이지 결과를 처리기로 반환하기를 원합니다. 그들이 모두 값을 반환했을 때 나는 OnComplete가 호출되기를 원했고이 모든 정보는 메인 쓰레드로 전달되었다.
내가 뭘 하려는지 알기를 바랍니다. 도움을 드리고 싶은 분은 미리 감사드립니다!
업데이트 나는 당신의 제안을 받아서 사용하도록했습니다. 하지만 몇 가지 질문이 있습니다. 여기에 제가 작성한 코드가 있습니다. 올바른 방향으로 가고 있는지 확인하는 개념입니다. 의견을 읽으십시오, 나는 거기에 진행하는 방법에 대한 나의 질문을 포함 시켰습니다. 지금까지 내 질문에 관심을 가져 주신 모든 분들께 감사드립니다.
public List<String> ProcessList (string[] URLs)
{
List<string> data = new List<string>();
for(int i = 0; i < URLs.Length - 1; i++)
{
//not sure how to do this now??
//I want only 10 HttpWebRequest running at once.
//Also I want this method to block until all the URL data has been returned.
}
return data;
}
private async Task<string> GetURLData(string URL)
{
//First setup out web client
HttpWebRequest Request = GetWebRequest(URL);
//
//Check if the client holds a value. (There were no errors)
if (Request != null)
{
//GetCouponsAsync will return to the calling function and resumes
//here when GetResponse is complete.
WebResponse Response = await Request.GetResponseAsync();
//
//Setup our Stream to read the reply
Stream ResponseStream = Response.GetResponseStream();
//return the reply string here...
}
}
비동기를 사용하고 있습니다. – ps2goat
간단한 Parallel.ForEach가 궁금하십니까? http://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx - 아, 한 번에 10 개만 원합니다. 제한에 대한이 그래서 질문을보십시오 : http://stackoverflow.com/questions/9290498/how-can-i-limit-parallel-foreach –
그래서 만약 내가 병렬을 사용합니다.각각 비동기 작업을 가질 필요가 없습니까? 개인 문자열 GetURLData (문자열 URL) 만 가질 수 있습니까? –
user2868614