CachePolicy
A cache policy that can be applied to the results of delegate executions.
using Polly.Utilities;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.Caching
{
public class CachePolicy : Policy
{
private readonly ICacheProvider _syncCacheProvider;
private readonly ITtlStrategy _ttlStrategy;
private readonly ICacheKeyStrategy _cacheKeyStrategy;
private readonly ICacheProviderAsync _asyncCacheProvider;
internal CachePolicy(ICacheProvider syncCacheProvider, ITtlStrategy ttlStrategy, ICacheKeyStrategy cacheKeyStrategy)
: base(delegate(Action<Context, CancellationToken> action, Context context, CancellationToken cancellationToken) {
action(context, cancellationToken);
}, PredicateHelper.EmptyExceptionPredicates)
{
_syncCacheProvider = syncCacheProvider;
_ttlStrategy = ttlStrategy;
_cacheKeyStrategy = cacheKeyStrategy;
}
public override TResult Execute<TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken)
{
return CacheEngine.Implementation(_syncCacheProvider.As<TResult>(), _ttlStrategy, _cacheKeyStrategy, action, context, cancellationToken);
}
internal CachePolicy(ICacheProviderAsync asyncCacheProvider, ITtlStrategy ttlStrategy, ICacheKeyStrategy cacheKeyStrategy)
: base((Func<Context, CancellationToken, Task> func, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) => func(context, cancellationToken), PredicateHelper.EmptyExceptionPredicates)
{
_asyncCacheProvider = asyncCacheProvider;
_ttlStrategy = ttlStrategy;
_cacheKeyStrategy = cacheKeyStrategy;
}
public override Task<TResult> ExecuteAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext)
{
return CacheEngine.ImplementationAsync(_asyncCacheProvider.AsyncAs<TResult>(), _ttlStrategy, _cacheKeyStrategy, action, context, cancellationToken, continueOnCapturedContext);
}
}
}