【发布时间】:2013-10-30 18:29:25
【问题描述】:
我想编写一个服务来轮询数据库并根据返回的数据执行操作。
我不确定最好的方法是什么,我可以找到一些关于它的博客和这个堆栈溢出问题Polling Service - C#。但是我担心它们都已经很老了,可能已经过时了。
任何人都可以就当前的建议或最佳实践(如果有的话)向我提供有关执行此类操作的建议,或向我指出有关此问题的最新博客文章的方向。据我所知,使用计时器或 tpl 任务是两种可能的方法。
如果仍然建议使用计时器,那么当服务停止时它们将如何工作,因为我打算让这些服务执行的操作可能需要 30 多分钟,这就是我说使用任务的原因,因为我可以使用任务取消令牌但是这些在取消时会抛出异常(如果我错了,请纠正我)并且我认为我并不真正想要这种行为(尽管如果您认为有理由我会想要这种行为,请纠正我)。
很抱歉,我可能在一个问题中问了很多问题,但我并不完全确定自己在问什么。
【问题讨论】:
-
我会先看看生产者-消费者模式。一个线程可以轮询和收集作业信息,然后将其传递给队列处理程序。
-
您将多久轮询一次数据库?这是服务将做的all吗?如果服务所做的只是不频繁地轮询数据库并且可能运行一个很长的任务,那么您最好编写一个普通的旧控制台应用程序并将其设置为 Windows 中的计划任务。
-
你有任何链接可以在代码 Grant 中实现吗?吉姆 - 我打算每 2 分钟轮询一次。是的,这就是服务的全部功能,但我可能会在以后添加额外的功能来监控在线提要。
-
@user2647347,我没有具体的链接,但是如果你搜索 producer-consumer c#,你会发现大量的参考实现。我将此模式用于必须随时间处理多个任务的 Windows 服务,并且效果很好。
标签: c# windows multithreading service timer