Пример #1
0
        /// <inheritdoc />
        public TReturn Execute(TOperation operation)
        {
            var getOrAddOp  = new GetOrAddCachedItemOp <TOperation, TReturn>(operation);
            var cacheResult = this.Execute(getOrAddOp);

            return(cacheResult.CachedObject);
        }
        public GetOrAddCachedItemOp <TOperation, TReturn> DeepCloneWithOperation(TOperation operation)
        {
            var result = new GetOrAddCachedItemOp <TOperation, TReturn>(
                operation);

            return(result);
        }
Пример #3
0
        /// <inheritdoc />
        public async Task <CacheResult <TOperation, TReturn> > ExecuteAsync(
            GetOrAddCachedItemOp <TOperation, TReturn> operation)
        {
            var syncResult = this.Execute(operation);
            var result     = await Task.FromResult(syncResult);

            return(result);
        }
        /// <inheritdoc />
        public bool Equals(GetOrAddCachedItemOp <TOperation, TReturn> other)
        {
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            if (ReferenceEquals(other, null))
            {
                return(false);
            }

            var result = this.Operation.IsEqualTo(other.Operation);

            return(result);
        }
Пример #5
0
 /// <inheritdoc />
 public CacheResult <TOperation, TReturn> Execute(
     GetOrAddCachedItemOp <TOperation, TReturn> operation)
 {
     lock (this.syncCache)
     {
         var found = this.operationToCacheResultMap.TryGetValue(operation.Operation, out var result);
         if (found)
         {
             return(result);
         }
         else
         {
             var newResult      = this.protocol.Execute(operation.Operation);
             var newCacheResult = new CacheResult <TOperation, TReturn>(operation.Operation, newResult, DateTime.UtcNow);
             this.operationToCacheResultMap.Add(operation.Operation, newCacheResult);
             return(newCacheResult);
         }
     }
 }