/// <summary> /// API called by external sync jobs /// </summary> /// <param name="request"></param> /// <returns></returns> /* * * [Action(DoSyncTaskCOC.Action)] * */ public void SyncCache(SyncData syncData) { var syncTask = SyncTaskFactory.CreateTask(syncData.TaskName); if (syncTask != null) { syncTask.Sync(syncData); } }
/// <summary> /// 缓存刷新 /// </summary> /// <param name="syncDataItem">时间戳</param> internal override void Sync(SyncData syncDataItem) { // 执行自身同步 SyncSelf(syncDataItem); // 执行子任务同步 var subTasks = this.SubTasks; if (subTasks != null && subTasks.Count > 0) { subTasks.ForEach(subTask => subTask.Sync(syncDataItem)); } }
/// <summary> /// 执行自身任务(取出对应缓存,比较时间戳,若时间戳已过期,则刷新缓存) /// </summary> /// <param name="syncDataItem"></param> private void SyncSelf(SyncData syncDataItem) { string key = syncDataItem.Key; string timestamp = syncDataItem.TimeStamp; if (string.IsNullOrEmpty(timestamp)) { // 如果时间戳为Null, 直接刷缓存 RefreshCachedItems(key); return; } DateTime syncTime; bool isTimestampValid = DateTime.TryParse(timestamp, out syncTime); if (!isTimestampValid) { // 如果时间戳转换失败, 直接退出, 不刷缓存 return; } var cachedValues = GetCachedValues(key); if (cachedValues != null && cachedValues.Count > 0) { foreach (var cachedValue in cachedValues) { if (null == cachedValue) { continue; } // 判断并刷新缓存 if (ShouldRefreshCache(cachedValue, syncTime)) { RefreshCachedItems(key); } } } }
/// <summary> /// 缓存刷新 /// </summary> /// <param name="syncDataItem">时间戳</param> internal abstract void Sync(SyncData syncDataItem);
/// <summary> /// 执行具体任务 /// </summary> /// <param name="syncDataItem"></param> protected abstract void DoTask(SyncData syncDataItem);