Я пишу консольное приложение на С#, которое сбрасывает данные с веб-страниц.
Это приложение перейдет на около 8000 веб-страниц и скопирует данные (одинаковый формат данных на каждой странице).
Я работаю прямо сейчас без асинхронных методов и многопоточности.
Однако мне нужно, чтобы он был быстрее. Он использует только около 3% -6% от процессора, я думаю, потому что он тратит время ожидания загрузки html. (WebClient.DownloadString(url))
Это основной поток моей программы
DataSet alldata;
foreach(var url in the8000urls)
{
// ScrapeData downloads the html from the url with WebClient.DownloadString
// and scrapes the data into several datatables which it returns as a dataset.
DataSet dataForOnePage = ScrapeData(url);
//merge each table in dataForOnePage into allData
}
// PushAllDataToSql(alldata);
Я пытался многопользовательский поток, но не уверен, как правильно начать работу. Я использую .net 4.5, и я понимаю, что асинхронный и ждущий в 4.5, чтобы сделать это намного проще для программирования, но я все еще немного потерял.
Моя идея состояла в том, чтобы просто создавать новые темы, которые асинхронны для этой строки
DataSet dataForOnePage = ScrapeData(url);
а затем, как только закончите, запустите
//merge each table in dataForOnePage into allData
Может ли кто-нибудь указать мне в правильном направлении, как сделать эту строку асинхронной в .net 4.5 С#, а затем завершить мой метод слияния?
Спасибо.
Изменить: Вот мой метод ScrapeData:
public static DataSet GetProperyData(CookieAwareWebClient webClient, string pageid)
{
var dsPageData = new DataSet();
// DOWNLOAD HTML FOR THE REO PAGE AND LOAD IT INTO AN HTMLDOCUMENT
string url = @"https://domain.com?&id=" + pageid + @"restofurl";
string html = webClient.DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(html );
// A BUNCH OF PARSING WITH HTMLAGILITY AND STORING IN dsPageData
return dsPageData ;
}