我想同时监控许多网页/ rss订阅,并定期轮询它们(它们可能都有不同的更新频率)。我正在考虑为我想要镜像的每个源创建一个线程,该线程将无限循环,然后在处理获取的数据后休眠到下一次更新。
有没有人有更好的点子或者如何做的例子?
发布于 2009-05-27 16:06:37
使用计时器每1分钟(或5分钟)开始一次。在计时器回调中,循环遍历您需要检查的urls,并验证它们是否需要检查(正如您在评论中所说的,它们将具有不同的同步时间)。您可以准备一个适当的结构来保存urls和它们的超时,以及它们的上次超时时间。
如果一个OKed是同步的(它的时间已经过去了),启动一个异步HttpWebRequest来获取它。这样,您可以将所有接收部分卸载到线程池线程,因此它不会影响主计时器回调线程。
要小心-如果您对响应进行了大量处理,您可能希望在HttpWebRequest回调中启动常规线程来进行额外的处理,或者实现某种类型的队列,因此您需要尽快释放线程池线程。
下面是如何发出异步请求的一个很好的解释:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic23172.aspx
你也可以在谷歌上搜索更多的例子,但这是一个很好的开始。
发布于 2009-05-27 16:07:01
为什么不在一个时钟上同步它,比如让它们在每小时( 10,20,30等)的10个时钟上全部更新,而不是让所有的线程在10分钟内随机更新。为什么需要为每个页面/提要创建一个线程?
发布于 2009-05-27 16:11:02
使用Timer对象来触发使用BackgroundWorkerThread对象的进程,以便可以在后台进行处理。根据您拥有的提要数量,您可以考虑在较短的时间间隔内进行“交错”更新。比如说,每隔5分钟,工作线程就会启动,转到提要列表中的下一个提要,以监视和检查更新。
我相信你已经从一些提要阅读器中看到,一次更新所有提要并不总是最好的解决方案,因为它可能会导致用户界面冻结一段时间。
https://stackoverflow.com/questions/916588
复制相似问题