WebからダウンロードするURL(約800)がたくさんあります。私はクラスを持っています:HttpWebRequestクラスで使用してhtmlページをダウンロードして取得するHttpDownloader.cs。その後、正規表現のページにアクセスします。
BackgroundWorkerコンポーネントを使用したいのですが、すべてのページで使用する方法がわかりません。ループ、またはそのようなものによって。
私のコード:
ThreadPoolを使ってみましたが、実際に問題が発生しました。4つのURLで試しましたが、機能しませんでした。
foreach (string link in MyListOfUrls)
{
ThreadPool.QueueUserWorkItem((o) => {
HttpDownloader httpDownload = new HttpDownloader(link);
string htmlDoc = httpDownload.GetPage();//get the html of the page
HtmlDocument doc=doc.LoadHtml(htmlDoc);//load html string to doc for pharsing
DoPharsing();//my func for pharsing
Save();//save into dataBase
});
}
funcでdataBaseとDataTableへの接続で使用しているため、ThreadPoolを使用すると例外が発生します。
「前の関数評価がタイムアウトしたため、関数評価が無効になりました。関数評価を再度有効にするには、実行を続行する必要があります。」
そのため、DataTableからデータを取得できません。たぶん私はすべてをダウンロードする必要があり、その後、ファーシングして保存しますか?
BackgroundWorkerコンポーネントで非同期に変更するにはどうすればよいですか?
ps Async Tpcをダウンロードできなかったので、アドバイスしないでください。
ありがとう