using System;
using System.Linq;
using System.Threading.Tasks;
namespace Abp.Runtime.Caching
{
///
/// Extension methods for .
///
public static class CacheExtensions
{
public static object Get(this ICache cache, string key, Func factory)
{
return cache.Get(key, k => factory());
}
public static object[] Get(this ICache cache, string[] keys, Func factory)
{
return keys.Select(key => cache.Get(key, k => factory())).ToArray();
}
public static Task GetAsync(this ICache cache, string key, Func> factory)
{
return cache.GetAsync(key, k => factory());
}
public static Task GetAsync(this ICache cache, string[] keys, Func> factory)
{
var tasks = keys.Select(key => cache.GetAsync(key, k => factory()));
return Task.WhenAll(tasks);
}
public static ITypedCache AsTyped(this ICache cache)
{
return new TypedCacheWrapper(cache);
}
public static TValue Get(this ICache cache, TKey key, Func factory)
{
return (TValue)cache.Get(key.ToString(), (k) => (object)factory(key));
}
public static TValue[] Get(this ICache cache, TKey[] keys, Func factory)
{
return keys.Select(key => (TValue)cache.Get(key.ToString(), (k) => (object)factory(key))).ToArray();
}
public static TValue Get(this ICache cache, TKey key, Func factory)
{
return cache.Get(key, (k) => factory());
}
public static TValue[] Get(this ICache cache, TKey[] keys, Func factory)
{
return keys.Select(key => cache.Get(key, (k) => factory())).ToArray();
}
public static async Task GetAsync(this ICache cache, TKey key, Func> factory)
{
var value = await cache.GetAsync(key.ToString(), async (keyAsString) =>
{
var v = await factory(key);
return (object)v;
});
return (TValue)value;
}
public static async Task GetAsync(this ICache cache, TKey[] keys, Func> factory)
{
var tasks = keys.Select(key =>
{
return cache.GetAsync(key.ToString(), async (keyAsString) =>
{
var v = await factory(key);
return (object)v;
});
});
var values = await Task.WhenAll(tasks);
return values.Select(value => (TValue)value).ToArray();
}
public static Task GetAsync(this ICache cache, TKey key, Func> factory)
{
return cache.GetAsync(key, (k) => factory());
}
public static Task GetAsync(this ICache cache, TKey[] keys, Func> factory)
{
var tasks = keys.Select(key => cache.GetAsync(key, (k) => factory()));
return Task.WhenAll(tasks);
}
public static TValue GetOrDefault(this ICache cache, TKey key)
{
var value = cache.GetOrDefault(key.ToString());
if (value == null)
{
return default(TValue);
}
return (TValue)value;
}
public static TValue[] GetOrDefault(this ICache cache, TKey[] keys)
{
var values = keys.Select(key =>
{
var value = cache.GetOrDefault(key.ToString());
if (value == null)
{
return default(TValue);
}
return (TValue)value;
});
return values.ToArray();
}
public static async Task GetOrDefaultAsync(this ICache cache, TKey key)
{
var value = await cache.GetOrDefaultAsync(key.ToString());
if (value == null)
{
return default(TValue);
}
return (TValue)value;
}
public static async Task GetOrDefaultAsync(this ICache cache, TKey[] keys)
{
var tasks = keys.Select(async (key) =>
{
var value = await cache.GetOrDefaultAsync(key.ToString());
if (value == null)
{
return default(TValue);
}
return (TValue)value;
});
return await Task.WhenAll(tasks);
}
}
}