antiantiswearingbot/AntiAntiSwearingBot/Extensions/ReaderWriterLockSlimExtensions.cs

24 lines
758 B
C#

using System.Threading;
namespace AntiAntiSwearingBot;
public readonly ref struct ReadLockToken
{
ReaderWriterLockSlim Lock { get; }
public ReadLockToken(ReaderWriterLockSlim l) => (Lock = l).EnterReadLock();
public void Dispose() => Lock.ExitReadLock();
}
public readonly ref struct WriteLockToken
{
ReaderWriterLockSlim Lock { get; }
public WriteLockToken(ReaderWriterLockSlim l) => (Lock = l).EnterWriteLock();
public void Dispose() => Lock.ExitWriteLock();
}
public static class ReaderWriterLockSlimExtensions
{
public static ReadLockToken GetReadLockToken(this ReaderWriterLockSlim l) => new ReadLockToken(l);
public static WriteLockToken GetWriteLockToken(this ReaderWriterLockSlim l) => new WriteLockToken(l);
}