我有不断被许多线程读取的数据。这些数据需要每天更新。System.Timer作为一个单身人士
我的方法是使用ReaderWriterLockSlim
来管理对数据的访问。每天晚上,检测日期变化的第一个线程对数据应用WriteLock
并更新它。
为了避免对日更改事件进行持续检查。理想情况下,我希望创建一个System.Timer对象作为单例,并让它自动启动,然后每24小时执行一次。
这一直是我的方法:
首先我伸出System.Timers到初始化执行回调。
using System.Timers;
namespace Utilities
{
class AutoStartTimer : Timer
{
public AutoStartTimer(ElapsedEventHandler callback, int period):base(period)
{
callback(null, null);
AutoReset = true;
Elapsed += callback;
Enabled = true;
}
}
}
然后我在一个需要它的单例中声明它。
private static AutoStartTimer _loadDataTimer =
new AutoStartTimer(DataLoader, 86400000); // Daily
这种方法到目前为止还在为我工作。不过,我想知道是否有更好的方法来实现Singleton Timer,它在初始化时执行一次,然后在一段时间后执行,或者如果有人设法在不扩展Timer类的情况下更有效地执行此操作。
我需要在我当前的项目中使用其中的很多项目,所以我想确保使用的是一种很好的方法。
谢谢。
为什么不是一个静态的定时器实例添加到管理该实例的另一个类? – Davio
不需要检查initilise /每当我创建该类的实例时,定时器是否为空? – Totero
使用静态类。 :) – Davio