| File: Utilities\ReaderWriterLockSlimExtensions.cs | Web Access |
| Project: src\msbuild\src\Framework\Microsoft.Build.Framework.csproj (Microsoft.Build.Framework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Threading; namespace Microsoft.Build.Internal; // This type inspired by https://github.com/dotnet/roslyn/blob/ec6da663c592238cca8e145044e7410c4ca9213a/src/Compilers/Core/Portable/InternalUtilities/SemaphoreSlimExtensions.cs internal static class ReaderWriterLockSlimExtensions { public static DisposableReadLock EnterDisposableReadLock(this ReaderWriterLockSlim rwLock) { rwLock.EnterReadLock(); return new DisposableReadLock(rwLock); } public static DisposableWriteLock EnterDisposableWriteLock(this ReaderWriterLockSlim rwLock) { rwLock.EnterWriteLock(); return new DisposableWriteLock(rwLock); } internal readonly struct DisposableReadLock : IDisposable { private readonly ReaderWriterLockSlim _rwLock; public DisposableReadLock(ReaderWriterLockSlim rwLock) => _rwLock = rwLock; public void Dispose() => _rwLock.ExitReadLock(); } internal readonly struct DisposableWriteLock : IDisposable { private readonly ReaderWriterLockSlim _rwLock; public DisposableWriteLock(ReaderWriterLockSlim rwLock) => _rwLock = rwLock; public void Dispose() => _rwLock.ExitWriteLock(); } }