我有不斷被許多線程讀取的數據。這些數據需要每天更新。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