@@ -390,10 +390,12 @@ public bool SetValue(TKey key, TValue value, DateTime expirationTime)
390
390
cacheItem . ExpirationTime = expirationTime ;
391
391
if ( _maintainLRU )
392
392
{
393
+ var localCacheItem = cacheItem ; // avoid closure when !_maintainLRU
394
+ var localThis = this ;
393
395
AddActionToEventQueue ( ( ) =>
394
396
{
395
- _doubleLinkedList . Remove ( cacheItem ) ;
396
- _doubleLinkedList . AddFirst ( cacheItem ) ;
397
+ localThis . _doubleLinkedList . Remove ( localCacheItem ) ;
398
+ localThis . _doubleLinkedList . AddFirst ( localCacheItem ) ;
397
399
} ) ;
398
400
}
399
401
}
@@ -416,11 +418,13 @@ public bool SetValue(TKey key, TValue value, DateTime expirationTime)
416
418
// add the new node to the _doubleLinkedList if _maintainLRU == true
417
419
if ( _maintainLRU )
418
420
{
421
+ var localNewCacheItem = newCacheItem ; // avoid closure when !_maintainLRU
422
+ var localThis = this ;
419
423
AddActionToEventQueue ( ( ) =>
420
424
{
421
425
// Add a remove operation in case two threads are trying to add the same value. Only the second remove will succeed in this case.
422
- _doubleLinkedList . Remove ( newCacheItem ) ;
423
- _doubleLinkedList . AddFirst ( newCacheItem ) ;
426
+ localThis . _doubleLinkedList . Remove ( localNewCacheItem ) ;
427
+ localThis . _doubleLinkedList . AddFirst ( localNewCacheItem ) ;
424
428
} ) ;
425
429
}
426
430
@@ -492,10 +496,12 @@ public bool TryGetValue(TKey key, out TValue value)
492
496
// make sure node hasn't been removed by a different thread
493
497
if ( _maintainLRU )
494
498
{
499
+ var localCacheItem = cacheItem ; // avoid closure on fast path or when !_maintainLRU
500
+ var localThis = this ;
495
501
AddActionToEventQueue ( ( ) =>
496
502
{
497
- _doubleLinkedList . Remove ( cacheItem ) ;
498
- _doubleLinkedList . AddFirst ( cacheItem ) ;
503
+ localThis . _doubleLinkedList . Remove ( localCacheItem ) ;
504
+ localThis . _doubleLinkedList . AddFirst ( localCacheItem ) ;
499
505
} ) ;
500
506
}
501
507
@@ -516,7 +522,11 @@ public bool TryRemove(TKey key, out TValue value)
516
522
}
517
523
518
524
if ( _maintainLRU )
519
- AddActionToEventQueue ( ( ) => _doubleLinkedList . Remove ( cacheItem ) ) ;
525
+ {
526
+ var localCacheItem = cacheItem ; // avoid closure on fast path or when !_maintainLRU
527
+ var localThis = this ;
528
+ AddActionToEventQueue ( ( ) => localThis . _doubleLinkedList . Remove ( localCacheItem ) ) ;
529
+ }
520
530
521
531
value = cacheItem . Value ;
522
532
OnItemRemoved ? . Invoke ( cacheItem . Value ) ;
0 commit comments