我正在开发一个 Windows 服务,我正在尝试使用 Parallel.ForEach 来生成唯一的定时线程。问题是,如果我在 VS 中将代码单独放置几个小时,或者如果我停止服务几个小时并启动任何备份 - 初始启动代码会执行两次。这是服务的 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 作为字符串下载 - 非常无聊。