Как сделать, чтобы было 5 потоков и каждый проходил по циклу и парсил свою страницу - C#
Формулировка задачи:
Есть 10 страниц из которых нужно спарсить линки
Хочу сделать чтобы было 5 потоков и каждый проходил по циклу и парсил свою страницу, а не по очереди парсили все страницы.
Нашел код как понял на создание потоков, но чет не могу его прикрутить. Может есть вариант по лучше ?
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); } } }
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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д