-
Notifications
You must be signed in to change notification settings - Fork 164
Open
Labels
Description
Describe the bug
If a value with an incompatible type is stored into the cache with GetOrAddAsync, the cache automatically calls the factory and stores the new, correct, value.
However, if you mix the sync and async methods, this does not happen. Using a sync/sync or async/async progression behaves as expected (old value replaced with value produced by the new value), but when mixing the two, the second call returns default.
To Reproduce
I use MSTest, but this should translate to NUnit pretty easily.
public class TestClass { }
[TestMethod]
public async Task Temp5()
{
// Arrange
var cache = new CachingService();
// Act
var k = "test_key";
var vstr = cache.GetOrAdd<string>(k, () => "val");
var vclass = await cache.GetOrAddAsync<TestClass>(k, () => Task.FromResult(new TestClass()));
// Assert
var cached = await cache.GetAsync<TestClass>(k);
Assert.IsNotNull(vclass);
Assert.IsNotNull(cached);
}Expected behavior
Should have replaced the previously cached value with the value produced by the new factory.
** Framework and Platform
- OS: Windows 11
- Framework: .NET Core 8
- LazyCache Version: 2.4.0