Beispiel #1
0
        private object GetFromCacheOrOutside(Guid id)
        {
            bool cameFromoutside = false;
            var  t    = Stopwatch.StartNew();
            var  item = _dataCache.RetrieveByFunc(id, i =>
            {
                cameFromoutside = true;
                return(_getter.GetItem(i));
            });

            t.Stop();
            _storage.PutObject(Name, id, item);

            if (cameFromoutside)
            {
                _updateDependenciesByQueries.ForEach(k => k(id));
                //сообщение о том, что ресурс пришел снаружи, приходит из геттера
            }
            else
            {
                _getter.StatChannel.SendMessageAboutOneResource(id, Actions.CacheGet, t.Elapsed);
            }
            _storage.ClearObject();
            return(item);
        }
Beispiel #2
0
        internal SecurityToken GetToken(Guid id)
        {
            Contract.Ensures(Contract.Result <SecurityToken>() != null);
            var context = _codeProvider.GetContext();

            Debug.Assert(context != null);
            var key   = ConvertToString(id, context.SessionCode);
            var token = _tokenProvider.RetrieveByFunc(key, t => GetTokenFor(id, context)) as SecurityToken;

            return(token);
        }