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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication9 {
    class Program {
        static void Main(string[] args) {
            string[] urls = { "http://www.yandex.ru", "http://www.google.com", "http://www.mail.ru" };
            LoadAndParse(urls);
            Console.ReadLine();
        }
        static async void LoadAndParse(string[] urls) {
            foreach (string url in urls) {
                string data = "";
                try {
                    data = await new WebClient().DownloadStringTaskAsync(url);
                }
                catch (WebException ex) {
                    LogError(ex);
                }
                string result = await ParseData(data);
                Console.WriteLine(result);
            }
        }
        static Task<string> ParseData(string data) {
            return Task.Factory.StartNew(() => {
                //Тут парсим полученную страницу...
                return data;
            });
        }
        static void LogError(Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
}

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы