diff --git a/LazyCache.UnitTests/CachingServiceMemoryCacheProviderTests.cs b/LazyCache.UnitTests/CachingServiceMemoryCacheProviderTests.cs index a346ae3..0657b63 100644 --- a/LazyCache.UnitTests/CachingServiceMemoryCacheProviderTests.cs +++ b/LazyCache.UnitTests/CachingServiceMemoryCacheProviderTests.cs @@ -1169,5 +1169,18 @@ public void TryGetReturnsCachedValueAndTrue() Assert.Throws(() => sut.TryGetValue(key, out var value3)); } + + [Test] + public void TryGetReturnsCachedValueFromGetOrAdd() + { + sut.GetOrAdd(TestKey, () => testObject); + var isSuccess = sut.TryGetValue(TestKey, out var actual); + var expected = testObject; + + Assert.IsTrue(isSuccess); + Assert.IsNotNull(actual); + Assert.AreEqual(expected, actual); + } + } } \ No newline at end of file diff --git a/LazyCache/CachingService.cs b/LazyCache/CachingService.cs index df091de..1695572 100644 --- a/LazyCache/CachingService.cs +++ b/LazyCache/CachingService.cs @@ -92,7 +92,16 @@ public virtual bool TryGetValue(string key, out T value) { ValidateKey(key); - return CacheProvider.TryGetValue(key, out value); + try + { + var contains = CacheProvider.TryGetValue>(key, out var lazyFactory); + value = GetValueFromLazy(lazyFactory, out var _); + return contains; + } + catch (InvalidCastException) + { + return CacheProvider.TryGetValue(key, out value); + } } public virtual T GetOrAdd(string key, Func addItemFactory)