v2.3.3
What's changed
- Eliminated all races in
ConcurrentLrueviction logic, and the transition between the cold cache and warm cache eviction routines. This prevents a variety of rare 'off by one item count' situations that could needlessly evict items when the cache is within bounds. - Fix
ConcurrentLru.Clear()to always clear the cache when items in the warm queue are marked as accessed. - Optimize
ConcurrentLfudrain buffers logic to give ~5% better throughput (measured by the eviction throughput test). - Cache the
ConcurrentLfudrain buffers delegate to prevent allocating a closure when scheduling maintenance. BackgroundThreadSchedulerandThreadPoolSchedulernow useTaskScheduler.Default, instead of implicitly usingTaskScheduler.Current(fixes CA2008).ScopedAsyncCachenow internally callsConfigureAwait(false)when awaiting tasks (fixes CA2007).- Fix
ConcurrentLrudebugger display on .NET Standard.
Full changelog: v2.3.2...v2.3.3