diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props
index 78f24d40e0e..884b94cbe5e 100644
--- a/eng/PatchConfig.props
+++ b/eng/PatchConfig.props
@@ -13,6 +13,8 @@
+ Microsoft.Extensions.Caching.Abstractions;
+ Microsoft.Extensions.Caching.Memory;
diff --git a/src/Caching/Abstractions/src/MemoryCacheExtensions.cs b/src/Caching/Abstractions/src/MemoryCacheExtensions.cs
index e415d27844f..c0ba3af90ed 100644
--- a/src/Caching/Abstractions/src/MemoryCacheExtensions.cs
+++ b/src/Caching/Abstractions/src/MemoryCacheExtensions.cs
@@ -35,39 +35,43 @@ public static bool TryGetValue(this IMemoryCache cache, object key, out T
public static TItem Set(this IMemoryCache cache, object key, TItem value)
{
- var entry = cache.CreateEntry(key);
- entry.Value = value;
- entry.Dispose();
+ using (var entry = cache.CreateEntry(key))
+ {
+ entry.Value = value;
+ }
return value;
}
public static TItem Set(this IMemoryCache cache, object key, TItem value, DateTimeOffset absoluteExpiration)
{
- var entry = cache.CreateEntry(key);
- entry.AbsoluteExpiration = absoluteExpiration;
- entry.Value = value;
- entry.Dispose();
+ using (var entry = cache.CreateEntry(key))
+ {
+ entry.AbsoluteExpiration = absoluteExpiration;
+ entry.Value = value;
+ }
return value;
}
public static TItem Set(this IMemoryCache cache, object key, TItem value, TimeSpan absoluteExpirationRelativeToNow)
{
- var entry = cache.CreateEntry(key);
- entry.AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow;
- entry.Value = value;
- entry.Dispose();
+ using (var entry = cache.CreateEntry(key))
+ {
+ entry.AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow;
+ entry.Value = value;
+ }
return value;
}
public static TItem Set(this IMemoryCache cache, object key, TItem value, IChangeToken expirationToken)
{
- var entry = cache.CreateEntry(key);
- entry.AddExpirationToken(expirationToken);
- entry.Value = value;
- entry.Dispose();
+ using (var entry = cache.CreateEntry(key))
+ {
+ entry.AddExpirationToken(expirationToken);
+ entry.Value = value;
+ }
return value;
}
@@ -91,13 +95,11 @@ public static TItem GetOrCreate(this IMemoryCache cache, object key, Func
{
if (!cache.TryGetValue(key, out object result))
{
- var entry = cache.CreateEntry(key);
- result = factory(entry);
- entry.SetValue(result);
- // need to manually call dispose instead of having a using
- // in case the factory passed in throws, in which case we
- // do not want to add the entry to the cache
- entry.Dispose();
+ using (var entry = cache.CreateEntry(key))
+ {
+ result = factory(entry);
+ entry.Value = result;
+ }
}
return (TItem)result;
@@ -107,13 +109,11 @@ public static async Task GetOrCreateAsync(this IMemoryCache cache,
{
if (!cache.TryGetValue(key, out object result))
{
- var entry = cache.CreateEntry(key);
- result = await factory(entry);
- entry.SetValue(result);
- // need to manually call dispose instead of having a using
- // in case the factory passed in throws, in which case we
- // do not want to add the entry to the cache
- entry.Dispose();
+ using (ICacheEntry entry = cache.CreateEntry(key))
+ {
+ result = await factory(entry).ConfigureAwait(false);
+ entry.Value = result;
+ }
}
return (TItem)result;
diff --git a/src/Caching/Memory/src/CacheEntry.cs b/src/Caching/Memory/src/CacheEntry.cs
index 17dda76bf61..fb0a3717615 100644
--- a/src/Caching/Memory/src/CacheEntry.cs
+++ b/src/Caching/Memory/src/CacheEntry.cs
@@ -11,10 +11,10 @@ namespace Microsoft.Extensions.Caching.Memory
{
internal class CacheEntry : ICacheEntry
{
- private bool _added = false;
+ private bool _disposed = false;
private static readonly Action