ReaderWriterLockSlimExtensions.cs 3.6 KB

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