diff --git a/src/OpenIddict.Core/Caches/OpenIddictApplicationCache.cs b/src/OpenIddict.Core/Caches/OpenIddictApplicationCache.cs index f9a75d8c..dc1e3f7b 100644 --- a/src/OpenIddict.Core/Caches/OpenIddictApplicationCache.cs +++ b/src/OpenIddict.Core/Caches/OpenIddictApplicationCache.cs @@ -24,7 +24,7 @@ namespace OpenIddict.Core public class OpenIddictApplicationCache : IOpenIddictApplicationCache, IDisposable where TApplication : class { private readonly MemoryCache _cache; - private readonly ConcurrentDictionary> _signals; + private readonly ConcurrentDictionary _signals; private readonly IOpenIddictApplicationStore _store; public OpenIddictApplicationCache( @@ -36,7 +36,7 @@ namespace OpenIddict.Core SizeLimit = options.CurrentValue.EntityCacheLimit }); - _signals = new ConcurrentDictionary>(StringComparer.Ordinal); + _signals = new ConcurrentDictionary(StringComparer.Ordinal); _store = resolver.Get(); } @@ -121,7 +121,7 @@ namespace OpenIddict.Core { foreach (var signal in _signals) { - signal.Value.Value.Dispose(); + signal.Value.Dispose(); } _cache.Dispose(); @@ -378,9 +378,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The application identifier cannot be extracted."); } - if (_signals.TryGetValue(identifier, out Lazy signal)) + if (_signals.TryGetValue(identifier, out CancellationTokenSource signal)) { - signal.Value.Cancel(); + signal.Cancel(); _signals.TryRemove(identifier, out signal); } @@ -410,15 +410,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The application identifier cannot be extracted."); } - var signal = _signals.GetOrAdd(identifier, delegate - { - // Note: a Lazy is used here to ensure only one CancellationTokenSource - // can be created. Not doing so would result in expiration signals being potentially linked to - // multiple sources, with a single one of them being eventually tracked and thus, cancelable. - return new Lazy(() => new CancellationTokenSource()); - }); + var signal = _signals.GetOrAdd(identifier, _ => new CancellationTokenSource()); - return new CancellationChangeToken(signal.Value.Token); + return new CancellationChangeToken(signal.Token); } } } diff --git a/src/OpenIddict.Core/Caches/OpenIddictAuthorizationCache.cs b/src/OpenIddict.Core/Caches/OpenIddictAuthorizationCache.cs index 53b673cd..2c748548 100644 --- a/src/OpenIddict.Core/Caches/OpenIddictAuthorizationCache.cs +++ b/src/OpenIddict.Core/Caches/OpenIddictAuthorizationCache.cs @@ -24,7 +24,7 @@ namespace OpenIddict.Core public class OpenIddictAuthorizationCache : IOpenIddictAuthorizationCache, IDisposable where TAuthorization : class { private readonly MemoryCache _cache; - private readonly ConcurrentDictionary> _signals; + private readonly ConcurrentDictionary _signals; private readonly IOpenIddictAuthorizationStore _store; public OpenIddictAuthorizationCache( @@ -36,7 +36,7 @@ namespace OpenIddict.Core SizeLimit = options.CurrentValue.EntityCacheLimit }); - _signals = new ConcurrentDictionary>(StringComparer.Ordinal); + _signals = new ConcurrentDictionary(StringComparer.Ordinal); _store = resolver.Get(); } @@ -97,7 +97,7 @@ namespace OpenIddict.Core Subject = await _store.GetSubjectAsync(authorization, cancellationToken) }); - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -122,7 +122,7 @@ namespace OpenIddict.Core { foreach (var signal in _signals) { - signal.Value.Value.Dispose(); + signal.Value.Dispose(); } _cache.Dispose(); @@ -175,7 +175,7 @@ namespace OpenIddict.Core { foreach (var authorization in authorizations) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -248,7 +248,7 @@ namespace OpenIddict.Core { foreach (var authorization in authorizations) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -328,7 +328,7 @@ namespace OpenIddict.Core { foreach (var authorization in authorizations) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -441,7 +441,7 @@ namespace OpenIddict.Core { foreach (var authorization in authorizations) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -498,7 +498,7 @@ namespace OpenIddict.Core { if (authorization != null) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -556,7 +556,7 @@ namespace OpenIddict.Core { foreach (var authorization in authorizations) { - var signal = await CreateExpirationTokenAsync(authorization, cancellationToken); + var signal = await CreateExpirationSignalAsync(authorization, cancellationToken); if (signal == null) { throw new InvalidOperationException("An error occurred while creating an expiration signal."); @@ -596,9 +596,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The application identifier cannot be extracted."); } - if (_signals.TryGetValue(identifier, out Lazy signal)) + if (_signals.TryGetValue(identifier, out CancellationTokenSource signal)) { - signal.Value.Cancel(); + signal.Cancel(); _signals.TryRemove(identifier, out signal); } @@ -614,7 +614,7 @@ namespace OpenIddict.Core /// A that can be used to monitor the asynchronous operation, /// whose result returns an expiration signal for the specified authorization. /// - protected virtual async Task CreateExpirationTokenAsync( + protected virtual async Task CreateExpirationSignalAsync( [NotNull] TAuthorization authorization, CancellationToken cancellationToken) { if (authorization == null) @@ -628,15 +628,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The authorization identifier cannot be extracted."); } - var signal = _signals.GetOrAdd(identifier, delegate - { - // Note: a Lazy is used here to ensure only one CancellationTokenSource - // can be created. Not doing so would result in expiration signals being potentially linked to - // multiple sources, with a single one of them being eventually tracked and thus, cancelable. - return new Lazy(() => new CancellationTokenSource()); - }); + var signal = _signals.GetOrAdd(identifier, _ => new CancellationTokenSource()); - return new CancellationChangeToken(signal.Value.Token); + return new CancellationChangeToken(signal.Token); } } } diff --git a/src/OpenIddict.Core/Caches/OpenIddictScopeCache.cs b/src/OpenIddict.Core/Caches/OpenIddictScopeCache.cs index f30dfdfb..a3d23453 100644 --- a/src/OpenIddict.Core/Caches/OpenIddictScopeCache.cs +++ b/src/OpenIddict.Core/Caches/OpenIddictScopeCache.cs @@ -25,7 +25,7 @@ namespace OpenIddict.Core public class OpenIddictScopeCache : IOpenIddictScopeCache, IDisposable where TScope : class { private readonly MemoryCache _cache; - private readonly ConcurrentDictionary> _signals; + private readonly ConcurrentDictionary _signals; private readonly IOpenIddictScopeStore _store; public OpenIddictScopeCache( @@ -37,7 +37,7 @@ namespace OpenIddict.Core SizeLimit = options.CurrentValue.EntityCacheLimit }); - _signals = new ConcurrentDictionary>(StringComparer.Ordinal); + _signals = new ConcurrentDictionary(StringComparer.Ordinal); _store = resolver.Get(); } @@ -113,7 +113,7 @@ namespace OpenIddict.Core { foreach (var signal in _signals) { - signal.Value.Value.Dispose(); + signal.Value.Dispose(); } _cache.Dispose(); @@ -349,9 +349,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The application identifier cannot be extracted."); } - if (_signals.TryGetValue(identifier, out Lazy signal)) + if (_signals.TryGetValue(identifier, out CancellationTokenSource signal)) { - signal.Value.Cancel(); + signal.Cancel(); _signals.TryRemove(identifier, out signal); } @@ -380,15 +380,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The scope identifier cannot be extracted."); } - var signal = _signals.GetOrAdd(identifier, delegate - { - // Note: a Lazy is used here to ensure only one CancellationTokenSource - // can be created. Not doing so would result in expiration signals being potentially linked to - // multiple sources, with a single one of them being eventually tracked and thus, cancelable. - return new Lazy(() => new CancellationTokenSource()); - }); + var signal = _signals.GetOrAdd(identifier, _ => new CancellationTokenSource()); - return new CancellationChangeToken(signal.Value.Token); + return new CancellationChangeToken(signal.Token); } } } diff --git a/src/OpenIddict.Core/Caches/OpenIddictTokenCache.cs b/src/OpenIddict.Core/Caches/OpenIddictTokenCache.cs index d2e8d451..648ba381 100644 --- a/src/OpenIddict.Core/Caches/OpenIddictTokenCache.cs +++ b/src/OpenIddict.Core/Caches/OpenIddictTokenCache.cs @@ -24,7 +24,7 @@ namespace OpenIddict.Core public class OpenIddictTokenCache : IOpenIddictTokenCache, IDisposable where TToken : class { private readonly MemoryCache _cache; - private readonly ConcurrentDictionary> _signals; + private readonly ConcurrentDictionary _signals; private readonly IOpenIddictTokenStore _store; public OpenIddictTokenCache( @@ -36,7 +36,7 @@ namespace OpenIddict.Core SizeLimit = options.CurrentValue.EntityCacheLimit }); - _signals = new ConcurrentDictionary>(StringComparer.Ordinal); + _signals = new ConcurrentDictionary(StringComparer.Ordinal); _store = resolver.Get(); } @@ -145,7 +145,7 @@ namespace OpenIddict.Core { foreach (var signal in _signals) { - signal.Value.Value.Dispose(); + signal.Value.Dispose(); } _cache.Dispose(); @@ -679,9 +679,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The application identifier cannot be extracted."); } - if (_signals.TryGetValue(identifier, out Lazy signal)) + if (_signals.TryGetValue(identifier, out CancellationTokenSource signal)) { - signal.Value.Cancel(); + signal.Cancel(); _signals.TryRemove(identifier, out signal); } @@ -710,15 +710,9 @@ namespace OpenIddict.Core throw new InvalidOperationException("The token identifier cannot be extracted."); } - var signal = _signals.GetOrAdd(identifier, delegate - { - // Note: a Lazy is used here to ensure only one CancellationTokenSource - // can be created. Not doing so would result in expiration signals being potentially linked to - // multiple sources, with a single one of them being eventually tracked and thus, cancelable. - return new Lazy(() => new CancellationTokenSource()); - }); + var signal = _signals.GetOrAdd(identifier, _ => new CancellationTokenSource()); - return new CancellationChangeToken(signal.Value.Token); + return new CancellationChangeToken(signal.Token); } } }