123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- namespace PlcSiemens.Core.Extension
- {
- public static class ReaderWriterLockSlimExtensions
- {
- /// <summary>An atom read action wrapper.
- /// </summary>
- /// <param name="readerWriterLockSlim"></param>
- /// <param name="action"></param>
- /// <exception cref="ArgumentNullException"></exception>
- 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();
- }
- }
- /// <summary>An atom read func wrapper.
- /// </summary>
- /// <param name="readerWriterLockSlim"></param>
- /// <param name="function"></param>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- /// <exception cref="ArgumentNullException"></exception>
- public static T AtomRead<T>(this ReaderWriterLockSlim readerWriterLockSlim, Func<T> function)
- {
- if (readerWriterLockSlim == null)
- {
- throw new ArgumentNullException("readerWriterLockSlim");
- }
- if (function == null)
- {
- throw new ArgumentNullException("function");
- }
- readerWriterLockSlim.EnterReadLock();
- try
- {
- return function();
- }
- finally
- {
- readerWriterLockSlim.ExitReadLock();
- }
- }
- /// <summary>An atom write action wrapper.
- /// </summary>
- /// <param name="readerWriterLockSlim"></param>
- /// <param name="action"></param>
- /// <exception cref="ArgumentNullException"></exception>
- 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();
- }
- }
- /// <summary>An atom write func wrapper.
- /// </summary>
- /// <param name="readerWriterLockSlim"></param>
- /// <param name="function"></param>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- /// <exception cref="ArgumentNullException"></exception>
- public static T AtomWrite<T>(this ReaderWriterLockSlim readerWriterLockSlim, Func<T> function)
- {
- if (readerWriterLockSlim == null)
- {
- throw new ArgumentNullException("readerWriterLockSlim");
- }
- if (function == null)
- {
- throw new ArgumentNullException("function");
- }
- readerWriterLockSlim.EnterWriteLock();
- try
- {
- return function();
- }
- finally
- {
- readerWriterLockSlim.ExitWriteLock();
- }
- }
- }
- }
|