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);
}
}
}