Как сделать, чтобы было 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);
}
}
}