using System; using System.Runtime.Caching; namespace IStation { internal sealed partial class SharedMemoryCache { /// /// If key not found, sets a new cache item by key, function and optional eviction /// /// /// A unique identifier for the cache entry to insert /// A function to execute to get the value for the cache entry /// (Optional) An object that contains eviction details for the cache entry /// An object of type T, or default T public T AddOrGetExisting(string key, Func valueFunction, CacheItemPolicy policy = null) { if (!this.HasKey(key)) { // GetSet calls can be cancelled, where as Set calls expect to always run return this.GetSet(key, valueFunction, policy); } return this.Get(key); } /// /// If key not found, sets a new cache item by key, value and optional eviction /// /// /// A unique identifier for the cache entry to insert /// A value for the cache entry /// (Optional) An object that contains eviction details for the cache entry /// An object of type T, or default T public T AddOrGetExisting(string key, T value, CacheItemPolicy policy = null) { if (!this.HasKey(key)) { return this.GetSet(key, value, policy); } return this.Get(key); } } }