Ejemplo n.º 1
0
        /// <summary>
        /// 向缓存池中添加一个键值对,若添加成功,将触发Updated事件。若键已存在于缓存池中,将替换原有的值。
        /// <para>请勿在循环中调用此方法,这将频繁触发Updated事件,并严重影响性能。若要一次性添加多个值,请使用AddOrUpdates方法。</para>
        /// </summary>
        /// <param name="key">要添加的键。</param>
        /// <param name="value">该键对应的值。</param>
        public void AddOrUpdate(TKey key, TValue value)
        {
            var newModel = new CacheModel <TValue>(value);

            if (_caches.AddOrUpdate(key, newModel, (k, v) => newModel) != null)
            {
                Updated?.Invoke(new List <TKey> {
                    key
                }, null);
            }
            ;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 向缓存池中添加一组键值对,若有至少一个值添加成功,将在添加结束后触发Updated事件。若键已存在于缓存池中,将替换原有的值。
        /// </summary>
        /// <param name="keyValuePairs">要添加的一组键值对。</param>
        public void AddOrUpdates(IEnumerable <KeyValuePair <TKey, TValue> > keyValuePairs)
        {
            var updatedKeys = new List <TKey>();

            foreach (var pair in keyValuePairs)
            {
                var newModel = new CacheModel <TValue>(pair.Value);
                if (_caches.AddOrUpdate(pair.Key, newModel, (k, v) => newModel) != null)
                {
                    updatedKeys.Add(pair.Key);
                }
            }
            if (updatedKeys.Count != 0)
            {
                Updated?.Invoke(updatedKeys, null);
            }
        }