我有许多线程不断读取的数据。这些数据需要每天更新。
我的方法是使用 aReaderWriterLockSlim
来管理对数据的访问。每天晚上,检测日变化的第一个线程将 a 应用于WriteLock
数据并更新它。
为了避免不断检查换天事件。理想情况下,我希望将 System.Timer 对象创建为单例,并让它自动启动,然后每 24 小时执行一次。
这是我的方法:
首先,我扩展了 System.Timers 以在 init 上执行回调。
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
到目前为止,这种方法对我有用。但是我想知道是否有更好的方法来实现一个单例定时器,它在初始化时执行一次,然后在一段时间内执行,或者是否有人在不扩展 Timer 类的情况下设法更有效地做到这一点。
我需要在我当前的项目中使用其中的许多,所以我想确保我使用的是一种好的方法。
谢谢。