Как сделать, чтобы было 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д