/// <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); }
/// <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); }
/// <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); } } }