static void Main(string[] args) { x = new CachedField <string>(() => { Thread.Sleep(5000); return(DateTime.Now.ToString()); }, new TimeSpan(0, 0, 30)); x.OnInvalidated += X_OnInvalidated; new Thread(() => { while (true) { Thread.Sleep(10000); x.Invalidate(); } }).Start(); new Thread(() => { while (true) { Thread.Sleep(20000); x.Invalidate(); } }).Start(); while (true) { Console.WriteLine(x.Value); Thread.Sleep(2 * 1000); } }