using System;
using Microsoft.Extensions.Caching.Memory;
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, int? seconds)
{
if (!HasKey(key))
{
// GetSet calls can be cancelled, where as Set calls expect to always run
return this.GetSet(key, valueFunction, seconds);
}
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, int? seconds)
{
if (!HasKey(key))
{
return GetSet(key, value, seconds);
}
return this.Get(key);
}
}
}