私はしばらくの間ネットを掘り下げていましたが、問題を解決するのに役立つコード例が見つかりません..サンプルコードを見てきましたが、まだ「理解」していません...
読み進めましたが、
http://msdn.microsoft.com/en-us/library/aa480507.aspxおよび
http://msdn.microsoft.com/en-us/library/dd781401.aspx
しかし、私はそれを機能させることができないようです..
HTMLAGILITYPACKを使用しています
今日、私は最大 20 個の Web リクエストを行います。
リクエストが終了すると、結果がディクショナリに追加されます。その後、メソッドが情報を検索し、コードが見つかった場合は終了し、そうでない場合は別の webrequest を作成し、20 で上限に達します。すべてのスレッドを非同期で終了できるようにする必要があります。すべてが見つかったときに呼び出します。
こんなふうになります
public void FetchAndParseAllPages()
{
PageFetcher fetcher = new PageFetcher();
for (int i = 0; i < _maxSearchDepth; i += _searchIncrement)
{
string keywordNsearch = _keyword + i;
ParseHtmldocuments(fetcher.GetWebpage(keywordNsearch));
//this checks if the information was found or not, if
//found stop exit and add to database
if (GetPostion() != 201)
{ //ADD DATA TO DATABASE
InsertRankingData(DocParser.GetSearchResults(), _theSearchedKeyword);
return;
}
}
}
これは、ページをフェッチするクラス内にあります
public HtmlDocument GetWebpage(string urlToParse)
{
System.Net.ServicePointManager.Expect100Continue = false;
HtmlWeb htmlweb = new HtmlWeb();
htmlweb.PreRequest = new HtmlAgilityPack.HtmlWeb.PreRequestHandler(OnPreRequest);
HtmlDocument htmldoc = htmlweb.Load(@"urlToParse", "38.69.197.71", 45623, "PORXYUSER", "PROXYPASSWORD");
return htmldoc;
}
public bool OnPreRequest(HttpWebRequest request)
{
// request.UserAgent = RandomUseragent();
request.KeepAlive = false;
request.Timeout = 100000;
request.ReadWriteTimeout = 1000000;
request.ProtocolVersion = HttpVersion.Version10;
return true; // ok, go on
}
これを非同期にして、スレッドで本当に速くするにはどうすればよいですか? または、非同期で実行するときにスレッドを使用する必要がありますか?