public GetScopedResult <TValue> GetScoped <TValue>(String key, Func <ScopedValue <TValue> > getter) { CacheMethodTaken level2MethodTaken = CacheMethodTaken.None; var level1Result = this.level1.GetScoped(key, () => { var level2Result = this.level2.GetScoped(key, getter); level2MethodTaken = level2Result.MethodTaken; return(level2Result.ScopedValue); }); if (level2MethodTaken.HasFlag(CacheMethodTaken.Set) && this.policy.InvalidateLevel1OnLevel2Upsert) { level1Notifier.TryPublish(this.level1.Name, key, CacheItemActionTypes.Updated); } return(level1Result); }
public async Task <GetScopedResult <TValue> > GetScopedAsync <TValue>(String key, Func <Task <ScopedValue <TValue> > > getter) { CacheMethodTaken level2MethodTaken = CacheMethodTaken.None; var level1Result = await this.level1.GetScopedAsync(key, async() => { var level2Result = await this.level2.GetScopedAsync(key, getter).ConfigureAwait(false); level2MethodTaken = level2Result.MethodTaken; return(level2Result.ScopedValue); }).ConfigureAwait(false); if (level2MethodTaken.HasFlag(CacheMethodTaken.Set) && this.policy.InvalidateLevel1OnLevel2Upsert) { level1Notifier.TryPublish(this.level1.Name, key, CacheItemActionTypes.Updated); } return(level1Result); }