|  | @@ -10,13 +10,13 @@ namespace Admin.Core.Common.Extensions
 | 
	
		
			
				|  |  |             TKey key,
 | 
	
		
			
				|  |  |             Func<TKey, TValue> factory)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            TValue value;
 | 
	
		
			
				|  |  | -            if (!dictionary.TryGetValue(key, out value))
 | 
	
		
			
				|  |  | +            TValue obj;
 | 
	
		
			
				|  |  | +            if (dictionary.TryGetValue(key, out obj))
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                value = factory(key);
 | 
	
		
			
				|  |  | -                dictionary.Add(key, value);
 | 
	
		
			
				|  |  | +                return obj;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            return value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return dictionary[key] = factory(key);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public static TValue GetOrAdd<TKey, TValue>(
 | 
	
	
		
			
				|  | @@ -24,13 +24,7 @@ namespace Admin.Core.Common.Extensions
 | 
	
		
			
				|  |  |             TKey key,
 | 
	
		
			
				|  |  |             Func<TValue> factory)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            TValue value;
 | 
	
		
			
				|  |  | -            if (!dictionary.TryGetValue(key, out value))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                value = factory();
 | 
	
		
			
				|  |  | -                dictionary.Add(key, value);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            return value;
 | 
	
		
			
				|  |  | +            return dictionary.GetOrAdd(key, k => factory());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public static TValue AddOrUpdate<TKey, TValue>(
 | 
	
	
		
			
				|  | @@ -39,17 +33,17 @@ namespace Admin.Core.Common.Extensions
 | 
	
		
			
				|  |  |             Func<TKey, TValue> addFactory,
 | 
	
		
			
				|  |  |             Func<TKey, TValue, TValue> updateFactory)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            TValue value;
 | 
	
		
			
				|  |  | -            if (dictionary.TryGetValue(key, out value))
 | 
	
		
			
				|  |  | +            TValue obj;
 | 
	
		
			
				|  |  | +            if (dictionary.TryGetValue(key, out obj))
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                value = updateFactory(key, value);
 | 
	
		
			
				|  |  | +                obj = updateFactory(key, obj);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                value = addFactory(key);
 | 
	
		
			
				|  |  | +                obj = addFactory(key);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            dictionary[key] = value;
 | 
	
		
			
				|  |  | -            return value;
 | 
	
		
			
				|  |  | +            dictionary[key] = obj;
 | 
	
		
			
				|  |  | +            return obj;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public static TValue AddOrUpdate<TKey, TValue>(
 | 
	
	
		
			
				|  | @@ -58,17 +52,7 @@ namespace Admin.Core.Common.Extensions
 | 
	
		
			
				|  |  |             Func<TValue> addFactory,
 | 
	
		
			
				|  |  |             Func<TValue, TValue> updateFactory)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            TValue value;
 | 
	
		
			
				|  |  | -            if (dictionary.TryGetValue(key, out value))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                value = updateFactory(value);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            else
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                value = addFactory();
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            dictionary[key] = value;
 | 
	
		
			
				|  |  | -            return value;
 | 
	
		
			
				|  |  | +            return dictionary.AddOrUpdate(key, k => addFactory(), (k, v) => updateFactory(v));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |