Я читал много о 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...
}
}
использовать async и ждать – ps2goat
Простой Parallel.ForEach не может быть вопрос? http://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx - Ах, я вижу, вам нужно всего 10 за раз. Взгляните на этот вопрос SO для ограничения: http://stackoverflow.com/questions/9290498/how-can-i-limit-parallel-foreach –
Итак, если я использую Parallel.ForEach Мне не нужна задача async? Я могу просто иметь приватную строку GetURLData (строковый URL)? –
user2868614