using System; using System.Threading; using System.Threading.Tasks; namespace StellaOps.Provcache; public sealed partial class ProvcacheService { /// public async Task GetOrComputeAsync( string veriKey, Func> factory, bool bypassCache = false, CancellationToken cancellationToken = default) { ArgumentException.ThrowIfNullOrWhiteSpace(veriKey); ArgumentNullException.ThrowIfNull(factory); if (!bypassCache || !_options.AllowCacheBypass) { var result = await GetAsync(veriKey, bypassCache: false, cancellationToken).ConfigureAwait(false); if (result.WasCached && result.Entry is not null) { return result.Entry; } } var entry = await factory(cancellationToken).ConfigureAwait(false); await SetAsync(entry, cancellationToken).ConfigureAwait(false); return entry; } }