Parallel.ForEachを使用して一意のタイミングスレッドを生成しようとしているWindowsサービスに取り組んでいます。問題は、VSでコードを数時間そのままにしておくか、サービスを数時間停止してバックアップを開始すると、最初の起動コードが2回実行されることです。これは、サービスのOnStartが呼び出している静的なvoidからのスニペットです。
Parallel.ForEach(urls, url =>
{
PageGrabber pagegrab = new PageGrabber(url);
if (url.Type.ToLower() == "http")
{
pagegrab.Elapsed += (obj, e) =>
{
pagegrab.CheckNormal();
};
pagegrab.CheckNormal();
}
else
{
pagegrab.Elapsed += (obj, e) =>
{
pagegrab.CheckXML();
};
pagegrab.CheckXML();
}
}
);
これは、スレッドを直接使用する場合はうまく機能しますが、このコードを少し更新したかったのです。重複実行はすぐに発生します。PageGrabberオブジェクトは、WebClientを使用してHTMLまたはXMLを文字列としてダウンロードするだけであるという点で、非常に単純です。これは非常に退屈です。