private void RefreshIfNecessary() { if (NeedsUpdate(maxAgeMs)) { lock (myLock) { if (NeedsUpdate(maxAgeMs)) { Reload(); } } } else if (NeedsUpdate(minAgeMs)) { if (updateCounter == 0) { SetTimeout.OnBackground(() => { if (NeedsUpdate(minAgeMs)) { if (updateCounter == 0) { lock (myLock) { if (NeedsUpdate(minAgeMs)) { Reload(); } } } } }, 0, ReportException); } } }
private void RefreshIfNecessary() { CachedInstance ci = current; if (ci == null || updateTimer.ElapsedMilliseconds - ci.createdAt >= maxAgeMs) { lock (myLock) { ci = current; if (ci == null || updateTimer.ElapsedMilliseconds - ci.createdAt >= maxAgeMs) { current = new CachedInstance(createNewObjectFunc(), updateTimer); } } } else if (updateTimer.ElapsedMilliseconds - ci.createdAt >= minAgeMs) { SetTimeout.OnBackground(() => { ci = current; if (updateTimer.ElapsedMilliseconds - ci.createdAt >= minAgeMs) { lock (myLock) { ci = current; if (updateTimer.ElapsedMilliseconds - ci.createdAt >= minAgeMs) { current = new CachedInstance(createNewObjectFunc(), updateTimer); } } } }, 0); } }