我想编写一个服务来轮询数据库并根据带回的数据执行操作。我不确定这样做的最佳方法是什么,我可以找到一些关于它的博客和这个堆栈溢出问题PollingService-C#.然而,我担心它们都已经很老了,而且可能已经过时了。任何人都可以就当前的建议或最佳实践(如果有的话)向我提供有关执行此类操作的建议,或者向我指出有关此问题的最新博客文章的方向。据我所知,使用计时器或tpl任务是执行此操作的两种可能方法。如果仍然建议使用计时器,那么当服务停止时它们将如何工作,因为我打算让这些服务执行的操作可能需要30分钟以上,这就是为什么我说使用任务,因为我可以使用任务取消token但是这些在取消时会抛出异常
我有一个用C#编写的Windows服务。它内部有一个计时器,可以定期触发一些功能。所以我的服务框架:publicpartialclassArchiveService:ServiceBase{TimertickTack;intinterval=10;...protectedoverridevoidOnStart(string[]args){tickTack=newTimer(1000*interval);tickTack.Elapsed+=newElapsedEventHandler(tickTack_Elapsed);tickTack.Start();}protectedoverrid
我有一个用C#编写的Windows服务。它内部有一个计时器,可以定期触发一些功能。所以我的服务框架:publicpartialclassArchiveService:ServiceBase{TimertickTack;intinterval=10;...protectedoverridevoidOnStart(string[]args){tickTack=newTimer(1000*interval);tickTack.Elapsed+=newElapsedEventHandler(tickTack_Elapsed);tickTack.Start();}protectedoverrid
我正在编写一个Windows服务,它每隔一定时间运行一个可变长度的事件(数据库扫描和更新)。我需要此任务频繁运行,但要处理的代码并发运行多次并不安全。我怎样才能最简单地设置一个计时器,使其每30秒运行一次任务,同时从不重叠执行?(我假设System.Threading.Timer是这项工作的正确计时器,但可能是错误的)。 最佳答案 您可以使用计时器来完成,但您需要对数据库扫描和更新进行某种形式的锁定。一个简单的lock同步可能足以防止多次运行的发生。也就是说,在您的操作完成后启动一个计时器可能会更好,并且只使用它一次,然后停止它。下
我正在编写一个Windows服务,它每隔一定时间运行一个可变长度的事件(数据库扫描和更新)。我需要此任务频繁运行,但要处理的代码并发运行多次并不安全。我怎样才能最简单地设置一个计时器,使其每30秒运行一次任务,同时从不重叠执行?(我假设System.Threading.Timer是这项工作的正确计时器,但可能是错误的)。 最佳答案 您可以使用计时器来完成,但您需要对数据库扫描和更新进行某种形式的锁定。一个简单的lock同步可能足以防止多次运行的发生。也就是说,在您的操作完成后启动一个计时器可能会更好,并且只使用它一次,然后停止它。下
我目前正在用C#编写一个简单的、基于计时器的迷你应用程序,它每k秒执行n次Action。我正在尝试采用测试驱动的开发风格,因此我的目标是对应用程序的所有部分进行单元测试。所以,我的问题是:是否有一种对基于计时器的类进行单元测试的好方法?在我看来,问题在于存在很大的风险,即测试将花费很长时间来执行,因为它们必须等待很长时间才能发生所需的操作。特别是如果需要真实数据(秒),而不是使用框架允许的最小时间分辨率(1毫秒?)。我正在为操作使用一个模拟对象,以注册操作被调用的次数,这样操作几乎不需要时间。 最佳答案 我所做的是模拟计时器以及当前
我目前正在用C#编写一个简单的、基于计时器的迷你应用程序,它每k秒执行n次Action。我正在尝试采用测试驱动的开发风格,因此我的目标是对应用程序的所有部分进行单元测试。所以,我的问题是:是否有一种对基于计时器的类进行单元测试的好方法?在我看来,问题在于存在很大的风险,即测试将花费很长时间来执行,因为它们必须等待很长时间才能发生所需的操作。特别是如果需要真实数据(秒),而不是使用框架允许的最小时间分辨率(1毫秒?)。我正在为操作使用一个模拟对象,以注册操作被调用的次数,这样操作几乎不需要时间。 最佳答案 我所做的是模拟计时器以及当前
我想在特定时间调用我的C#应用程序中的特定函数。起初我想到了使用Timer(System.Time.Timer),但很快就无法使用了。为什么?简单。Timer类需要以毫秒为单位的Interval,但考虑到我可能希望函数被执行,假设在一周内执行,这意味着:7天=168小时;168小时=10,080分钟;10,080分钟=604,800秒;604,800秒=604,800,000毫秒;所以间隔为604,800,000;现在让我们记住Interval接受的数据类型是int,我们知道int范围从-2,147,483,648到2,147,483,647。这使得Timer无用,不是在这种情况下,而
我想在特定时间调用我的C#应用程序中的特定函数。起初我想到了使用Timer(System.Time.Timer),但很快就无法使用了。为什么?简单。Timer类需要以毫秒为单位的Interval,但考虑到我可能希望函数被执行,假设在一周内执行,这意味着:7天=168小时;168小时=10,080分钟;10,080分钟=604,800秒;604,800秒=604,800,000毫秒;所以间隔为604,800,000;现在让我们记住Interval接受的数据类型是int,我们知道int范围从-2,147,483,648到2,147,483,647。这使得Timer无用,不是在这种情况下,而
在本文中:http://msdn.microsoft.com/en-us/magazine/cc164015.aspx作者声明System.Threading.Timer不是线程安全的。从那时起,这在博客上、Richter的书“CLRviaC#”和SO中都重复了这一点,但这从来没有被证明是合理的。此外MSDNdocumentation确保“这种类型是线程安全的。”1)谁说的是真话?2)如果这是原始文章,是什么让System.Threading.Timer不是线程安全的,以及它的包装器System.Timers.Timer如何实现更多的线程安全?谢谢 最佳答案