diff --git a/Enyim.Caching.Tests/MemcachedClientGetTests.cs b/Enyim.Caching.Tests/MemcachedClientGetTests.cs index 61a4fe2f..e92a8321 100644 --- a/Enyim.Caching.Tests/MemcachedClientGetTests.cs +++ b/Enyim.Caching.Tests/MemcachedClientGetTests.cs @@ -99,17 +99,17 @@ public void When_Getting_SByte_Result_Is_Successful() } [Fact] - public async Task When_GetValueOrCreateAsync_Is_Successful() + public async Task GetValueOrCreateAsyncTest() { - var key = GetUniqueKey("Get"); - var expected = "hello word"; - var value = await _client.GetValueOrCreateAsync(key, 10, Task.FromResult(expected)); - Assert.Equal(expected, value); - Assert.Equal(expected, await _client.GetValueAsync(key)); - - key = GetUniqueKey("Get"); - await _client.GetValueOrCreateAsync(key, 10, Task.FromResult(null)); - Assert.False((await _client.GetAsync(key)).Success); + var key = "GetValueOrCreateAsyncTest_" + Guid.NewGuid(); + await _client.GetValueOrCreateAsync(key, 10, () => GenerateValue()); + var cacheValue = await _client.GetValueAsync(key); + Assert.Equal(nameof(GetValueOrCreateAsyncTest), cacheValue); + } + + private Task GenerateValue() + { + return Task.FromResult(nameof(GetValueOrCreateAsyncTest)); } } } diff --git a/Enyim.Caching/Enyim.Caching.csproj b/Enyim.Caching/Enyim.Caching.csproj index eb689dff..5a6da1e7 100755 --- a/Enyim.Caching/Enyim.Caching.csproj +++ b/Enyim.Caching/Enyim.Caching.csproj @@ -2,7 +2,7 @@ EnyimMemcachedCore is a Memcached client library for .NET Core. Usage: Add services.AddEnyimMemcached(...) and app.UseEnyimMemcached() in Startup. Add IMemcachedClient into constructor. - 2.1.2 + 2.1.3 cnblogs.com netstandard2.0 true diff --git a/Enyim.Caching/IMemcachedClient.cs b/Enyim.Caching/IMemcachedClient.cs index 36722599..791be93f 100644 --- a/Enyim.Caching/IMemcachedClient.cs +++ b/Enyim.Caching/IMemcachedClient.cs @@ -16,7 +16,7 @@ public interface IMemcachedClient : IDisposable Task> GetAsync(string key); Task GetValueAsync(string key); - Task GetValueOrCreateAsync(string key, int cacheSeconds, Task generator); + Task GetValueOrCreateAsync(string key, int cacheSeconds, Func> generator); object Get(string key); T Get(string key); IDictionary Get(IEnumerable keys); diff --git a/Enyim.Caching/MemcachedClient.cs b/Enyim.Caching/MemcachedClient.cs index 980ea9cd..35d59f26 100755 --- a/Enyim.Caching/MemcachedClient.cs +++ b/Enyim.Caching/MemcachedClient.cs @@ -219,7 +219,7 @@ public async Task GetValueAsync(string key) return result.Success ? result.Value : default(T); } - public async Task GetValueOrCreateAsync(string key, int cacheSeconds, Task generator) + public async Task GetValueOrCreateAsync(string key, int cacheSeconds, Func> generator) { var result = await GetAsync(key); if (result.Success) @@ -227,7 +227,7 @@ public async Task GetValueOrCreateAsync(string key, int cacheSeconds, Task return result.Value; } - var value = await generator; + var value = await generator?.Invoke(); if (value != null) { await AddAsync(key, value, cacheSeconds); diff --git a/Enyim.Caching/NullMemcachedClient.cs b/Enyim.Caching/NullMemcachedClient.cs index 4ffa5bdf..1cd061bb 100644 --- a/Enyim.Caching/NullMemcachedClient.cs +++ b/Enyim.Caching/NullMemcachedClient.cs @@ -248,9 +248,9 @@ public Task SetAsync(string key, object value, int cacheSeconds) return Task.CompletedTask; } - public Task GetValueOrCreateAsync(string key, int cacheSeconds, Task generator) + public Task GetValueOrCreateAsync(string key, int cacheSeconds, Func> generator) { - return generator; + return generator?.Invoke(); } public Task FlushAllAsync()