<PackageReference Include="Castle.Windsor" Version="5.1.2" />

SlimReadLockHolder

using System; using System.ComponentModel; using System.Threading; namespace Castle.MicroKernel.Internal { [EditorBrowsable(EditorBrowsableState.Never)] internal class SlimReadLockHolder : ILockHolder, IDisposable { private readonly ReaderWriterLockSlim locker; public bool LockAcquired { get; set; } public SlimReadLockHolder(ReaderWriterLockSlim locker, bool waitForLock) { this.locker = locker; if (waitForLock) { locker.EnterReadLock(); LockAcquired = true; } else LockAcquired = locker.TryEnterReadLock(0); } public void Dispose() { if (LockAcquired) { locker.ExitReadLock(); LockAcquired = false; } } } }