Как сделать, чтобы было 5 потоков и каждый проходил по циклу и парсил свою страницу - C#

Узнай цену своей работы

Формулировка задачи:

Есть 10 страниц из которых нужно спарсить линки
Листинг программы
  1. private void GetLink()
  2. {
  3. WebClient client = new WebClient();
  4. int str = 10;
  5. for (int i = 1; i < str; i++)
  6. {
  7. string data;
  8. using (Stream stream = client.OpenRead("http://site.ru/25/3/" + i))
  9. using (StreamReader reader = new StreamReader(stream))
  10. data = reader.ReadToEnd();
  11. Regex reg = new Regex("(?<=<img src=").*(?=" class=")");
  12. MatchCollection math = reg.Matches(data);
  13. foreach (var mat in math)
  14. {
  15. string path = Path.Combine(pathq, Random(15) + ".jpg");
  16. client.DownloadFile(mat.ToString(), path);
  17. Process.Start(path);
  18. }
  19. }
  20. }
Хочу сделать чтобы было 5 потоков и каждый проходил по циклу и парсил свою страницу, а не по очереди парсили все страницы. Нашел код как понял на создание потоков, но чет не могу его прикрутить. Может есть вариант по лучше ?
Листинг программы
  1. for (int i = 0; i < Potok; i++)
  2. {
  3. Thread thread = new Thread(GetLink);
  4. threads.Add(thread);
  5. thread.Start();
  6. }

Решение задачи: «Как сделать, чтобы было 5 потоков и каждый проходил по циклу и парсил свою страницу»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ConsoleApplication9 {
  10.     class Program {
  11.         static void Main(string[] args) {
  12.             string[] urls = { "http://www.yandex.ru", "http://www.google.com", "http://www.mail.ru" };
  13.             LoadAndParse(urls);
  14.             Console.ReadLine();
  15.         }
  16.         static async void LoadAndParse(string[] urls) {
  17.             foreach (string url in urls) {
  18.                 string data = "";
  19.                 try {
  20.                     data = await new WebClient().DownloadStringTaskAsync(url);
  21.                 }
  22.                 catch (WebException ex) {
  23.                     LogError(ex);
  24.                 }
  25.                 string result = await ParseData(data);
  26.                 Console.WriteLine(result);
  27.             }
  28.         }
  29.         static Task<string> ParseData(string data) {
  30.             return Task.Factory.StartNew(() => {
  31.                 //Тут парсим полученную страницу...
  32.                 return data;
  33.             });
  34.         }
  35.         static void LogError(Exception ex) {
  36.             Console.WriteLine(ex.Message);
  37.         }
  38.     }
  39. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы