namespace PlcSiemens.Core.Extension { public static class ReaderWriterLockSlimExtensions { /// An atom read action wrapper. /// /// /// /// public static void AtomRead(this ReaderWriterLockSlim readerWriterLockSlim, Action action) { if (readerWriterLockSlim == null) { throw new ArgumentNullException("readerWriterLockSlim"); } if (action == null) { throw new ArgumentNullException("action"); } readerWriterLockSlim.EnterReadLock(); try { action(); } finally { readerWriterLockSlim.ExitReadLock(); } } /// An atom read func wrapper. /// /// /// /// /// /// public static T AtomRead(this ReaderWriterLockSlim readerWriterLockSlim, Func function) { if (readerWriterLockSlim == null) { throw new ArgumentNullException("readerWriterLockSlim"); } if (function == null) { throw new ArgumentNullException("function"); } readerWriterLockSlim.EnterReadLock(); try { return function(); } finally { readerWriterLockSlim.ExitReadLock(); } } /// An atom write action wrapper. /// /// /// /// public static void AtomWrite(this ReaderWriterLockSlim readerWriterLockSlim, Action action) { if (readerWriterLockSlim == null) { throw new ArgumentNullException("readerWriterLockSlim"); } if (action == null) { throw new ArgumentNullException("action"); } readerWriterLockSlim.EnterWriteLock(); try { action(); } finally { readerWriterLockSlim.ExitWriteLock(); } } /// An atom write func wrapper. /// /// /// /// /// /// public static T AtomWrite(this ReaderWriterLockSlim readerWriterLockSlim, Func function) { if (readerWriterLockSlim == null) { throw new ArgumentNullException("readerWriterLockSlim"); } if (function == null) { throw new ArgumentNullException("function"); } readerWriterLockSlim.EnterWriteLock(); try { return function(); } finally { readerWriterLockSlim.ExitWriteLock(); } } } }