private static Objects.LatestContentItemIndex GetLatestContentItemIndex(string languageCode) { string fileName = string.Format("AgilityContentIndex_{0}.bin", languageCode); string contentIndexFilePath = Path.Combine(BaseCache.GetLocalContentFilePath(), fileName); Objects.LatestContentItemIndex index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestContentItemIndex; if (index == null) { lock (_contentIndexLock) { index = AgilityContext.HttpContext.Items[fileName] as Objects.LatestContentItemIndex; if (index == null) { index = BaseCache.ReadFile <Objects.LatestContentItemIndex>(contentIndexFilePath); if (index == null) { index = new Objects.LatestContentItemIndex(); } int maxVersionID = index.MaxVersionID; var indexDelta = ServerAPI.GetLatestContentItemIndex(maxVersionID, languageCode); if (indexDelta != null) { foreach (var item in indexDelta) { if (item.MaxVersionID > index.MaxVersionID) { index.MaxVersionID = item.MaxVersionID; } index.Index[item.ReferenceName] = new Objects.LatestContentIndexItem() { MaxVersionID = item.MaxVersionID, ReferenceName = item.ReferenceName, Downloaded = false }; } BaseCache.WriteFile(index, contentIndexFilePath); AgilityContext.HttpContext.Items[fileName] = index; } } } } return(index); }