Exemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// 缓存刷新
 /// </summary>
 /// <param name="syncDataItem">时间戳</param>
 internal abstract void Sync(SyncData syncDataItem);
Exemplo n.º 5
0
 /// <summary>
 /// 执行具体任务
 /// </summary>
 /// <param name="syncDataItem"></param>
 protected abstract void DoTask(SyncData syncDataItem);