Вы можете сделать это довольно легко с помощью классов Cache
и Timer
, встроенных в .NET. Таймер работает в отдельном потоке.
И я на самом деле написал очень маленькую библиотеку-оболочку под названием WebCacheHelper , которая предоставляет эту функциональность в перегруженном конструкторе. Библиотека также служит строго типизированной оболочкой для объекта Cache
.
Вот пример того, как вы могли бы сделать это ...
public readonly static WebCacheHelper.Cache<int> RegisteredUsersCount =
new WebCacheHelper.Cache<int>(new TimeSpan(0, 5, 0), () => GetRegisteredUsersCount());
Это имеет ленивый аспект загрузки, где GetRegisteredUsersCount()
будет выполняться в вызывающем потоке в момент первого доступа к RegisteredUsersCount
. Однако после этого он выполняется каждые 5 минут в фоновом потоке. Это означает, что единственным пользователем, который будет оштрафован за медленное время ожидания, будет самый первый пользователь.
Тогда получить значение так же просто, как сослаться на RegisteredUsersCount.Value
.