コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }