diff --git a/build/dependencies.props b/build/dependencies.props index 9476d12300..cc88f5fcca 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -12,7 +12,7 @@ 4.7.49 2.0.0-* 2.0.0-* - 2.3.0-beta3-* + 2.3.0-beta4-* 2.0.0-* 15.3.0-* 5.2.2 diff --git a/src/Microsoft.AspNetCore.Mvc.TagHelpers/CacheTagHelper.cs b/src/Microsoft.AspNetCore.Mvc.TagHelpers/CacheTagHelper.cs index 7984e1fc19..e42bb67883 100644 --- a/src/Microsoft.AspNetCore.Mvc.TagHelpers/CacheTagHelper.cs +++ b/src/Microsoft.AspNetCore.Mvc.TagHelpers/CacheTagHelper.cs @@ -119,8 +119,8 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers // Use the CreateEntry to ensure a cache scope is created that will copy expiration tokens from // cache entries created from the GetChildContentAsync call to the current entry. IHtmlContent content; - using (var entry = MemoryCache.CreateEntry(cacheKey)) - { + var entry = MemoryCache.CreateEntry(cacheKey); + // The result is processed inside an entry // such that the tokens are inherited. @@ -130,9 +130,12 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers entry.SetOptions(options); entry.Value = result; - } tcs.SetResult(content); + // An entry gets committed to the cache when disposed gets called. We only want to do this when + // the content has been correctly generated (didn't throw an exception). For that reason the entry + // can't be put inside a using block. + entry.Dispose(); return content; } catch (Exception ex)