<PackageReference Include="Polly" Version="5.1.1-v5-x-cachealpha0001" />

CacheEngine

static class CacheEngine
using System; using System.Threading; using System.Threading.Tasks; namespace Polly.Caching { internal static class CacheEngine { internal static TResult Implementation<TResult>(ICacheProvider<TResult> cacheProvider, ITtlStrategy ttlStrategy, ICacheKeyStrategy cacheKeyStrategy, Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); string cacheKey = cacheKeyStrategy.GetCacheKey(context); if (cacheKey == null) return action(context, cancellationToken); TResult val = cacheProvider.Get(cacheKey); if (val != null) return val; TResult val2 = action(context, cancellationToken); TimeSpan ttl = ttlStrategy.GetTtl(context); if (ttl > TimeSpan.Zero) cacheProvider.Put(cacheKey, val2, ttl); return val2; } internal static async Task<TResult> ImplementationAsync<TResult>(ICacheProviderAsync<TResult> cacheProvider, ITtlStrategy ttlStrategy, ICacheKeyStrategy cacheKeyStrategy, Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { cancellationToken.ThrowIfCancellationRequested(); string cacheKey = cacheKeyStrategy.GetCacheKey(context); if (cacheKey == null) return await action(context, cancellationToken).ConfigureAwait(continueOnCapturedContext); TResult val = await cacheProvider.GetAsync(cacheKey, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); if (val != null) return val; TResult result = await action(context, cancellationToken).ConfigureAwait(continueOnCapturedContext); TimeSpan ttl = ttlStrategy.GetTtl(context); if (ttl > TimeSpan.Zero) await cacheProvider.PutAsync(cacheKey, result, ttl, cancellationToken, continueOnCapturedContext).ConfigureAwait(continueOnCapturedContext); return result; } } }