ReaderWriterLockSlimExtensions.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. namespace PlcSiemens.Core.Extension
  2. {
  3. public static class ReaderWriterLockSlimExtensions
  4. {
  5. /// <summary>An atom read action wrapper.
  6. /// </summary>
  7. /// <param name="readerWriterLockSlim"></param>
  8. /// <param name="action"></param>
  9. /// <exception cref="ArgumentNullException"></exception>
  10. public static void AtomRead(this ReaderWriterLockSlim readerWriterLockSlim, Action action)
  11. {
  12. if (readerWriterLockSlim == null)
  13. {
  14. throw new ArgumentNullException("readerWriterLockSlim");
  15. }
  16. if (action == null)
  17. {
  18. throw new ArgumentNullException("action");
  19. }
  20. readerWriterLockSlim.EnterReadLock();
  21. try
  22. {
  23. action();
  24. }
  25. finally
  26. {
  27. readerWriterLockSlim.ExitReadLock();
  28. }
  29. }
  30. /// <summary>An atom read func wrapper.
  31. /// </summary>
  32. /// <param name="readerWriterLockSlim"></param>
  33. /// <param name="function"></param>
  34. /// <typeparam name="T"></typeparam>
  35. /// <returns></returns>
  36. /// <exception cref="ArgumentNullException"></exception>
  37. public static T AtomRead<T>(this ReaderWriterLockSlim readerWriterLockSlim, Func<T> function)
  38. {
  39. if (readerWriterLockSlim == null)
  40. {
  41. throw new ArgumentNullException("readerWriterLockSlim");
  42. }
  43. if (function == null)
  44. {
  45. throw new ArgumentNullException("function");
  46. }
  47. readerWriterLockSlim.EnterReadLock();
  48. try
  49. {
  50. return function();
  51. }
  52. finally
  53. {
  54. readerWriterLockSlim.ExitReadLock();
  55. }
  56. }
  57. /// <summary>An atom write action wrapper.
  58. /// </summary>
  59. /// <param name="readerWriterLockSlim"></param>
  60. /// <param name="action"></param>
  61. /// <exception cref="ArgumentNullException"></exception>
  62. public static void AtomWrite(this ReaderWriterLockSlim readerWriterLockSlim, Action action)
  63. {
  64. if (readerWriterLockSlim == null)
  65. {
  66. throw new ArgumentNullException("readerWriterLockSlim");
  67. }
  68. if (action == null)
  69. {
  70. throw new ArgumentNullException("action");
  71. }
  72. readerWriterLockSlim.EnterWriteLock();
  73. try
  74. {
  75. action();
  76. }
  77. finally
  78. {
  79. readerWriterLockSlim.ExitWriteLock();
  80. }
  81. }
  82. /// <summary>An atom write func wrapper.
  83. /// </summary>
  84. /// <param name="readerWriterLockSlim"></param>
  85. /// <param name="function"></param>
  86. /// <typeparam name="T"></typeparam>
  87. /// <returns></returns>
  88. /// <exception cref="ArgumentNullException"></exception>
  89. public static T AtomWrite<T>(this ReaderWriterLockSlim readerWriterLockSlim, Func<T> function)
  90. {
  91. if (readerWriterLockSlim == null)
  92. {
  93. throw new ArgumentNullException("readerWriterLockSlim");
  94. }
  95. if (function == null)
  96. {
  97. throw new ArgumentNullException("function");
  98. }
  99. readerWriterLockSlim.EnterWriteLock();
  100. try
  101. {
  102. return function();
  103. }
  104. finally
  105. {
  106. readerWriterLockSlim.ExitWriteLock();
  107. }
  108. }
  109. }
  110. }