我想编写一个服务来轮询数据库并根据被带回的数据执行操作.
我不确定这样做的最佳方式是什么,我可以找到一些关于它的博客和这个堆栈溢出问题轮询服务 - C#.但是我很谨慎他们都很老了,可能已经过时了.
任何人都可以告诉我目前的建议或最佳实践(如果有的话)做这样的事情或指向我最近的博客文章的方向.从我可以使用计时器或tpl任务收集的是两种可能的方法.
如果仍然建议定时器,那么当服务停止时它们将如何工作,因为我打算让这些服务执行的操作可能需要30多分钟,这就是为什么我说使用任务因为我可以使用任务取消令牌但这些抛出取消时的异常(如果我错了,请纠正我)并且我不认为我真的想要那种行为(尽管如果你认为我有理由我会这样做,请纠正我).
对不起,我在一个问题上可能会问很多,但我不能完全确定自己在问什么.
文档System.Threading.Timer说我应该为它保留一个实时参考,以避免它被垃圾收集.但是我应该在哪里这样做?我main很简单,我不知道在哪里保留参考:
class Program {
static void Main() {
new System.Threading.Thread(myThreadStart).Start();
new System.Threading.Timer(myTimerCallback, new MyStateObject(), 0, 5000);
}
}
Run Code Online (Sandbox Code Playgroud)
我想过保持在参考static该领域Program类,假设static领域没有得到收集,直到应用程序结束.但我不确定这是最好的方法,所以我很感激你的建议.