diff --git a/src/Shared/LRUCache.cs b/src/Shared/LRUCache.cs index 58deac3..056c5f0 100644 --- a/src/Shared/LRUCache.cs +++ b/src/Shared/LRUCache.cs @@ -154,13 +154,26 @@ public class EnumerableLruCache where TKey : notnull public bool TryGetValue(TKey key, out TValue? value) { - _readerWriterLock.EnterReadLock(); + _readerWriterLock.EnterUpgradeableReadLock(); try { - return _cache.TryGetValue(key, out value); + if (_cache.TryGetValue(key, out value)) + { + return false; + } + _readerWriterLock.EnterWriteLock(); + try + { + _keys.Remove(key); + _keys.AddFirst(key); + } finally + { + _readerWriterLock.ExitWriteLock(); + } + return true; } finally { - _readerWriterLock.ExitReadLock(); + _readerWriterLock.ExitUpgradeableReadLock(); } }