{"id":80,"date":"2016-02-11T15:20:42","date_gmt":"2016-02-11T15:20:42","guid":{"rendered":"http:\/\/windows.emacslisp.com\/?p=80"},"modified":"2016-02-11T15:20:42","modified_gmt":"2016-02-11T15:20:42","slug":"umbraco-writelock-and-readlock-with-readerwriterlockslim","status":"publish","type":"post","link":"http:\/\/windows.emacslisp.com\/index.php\/2016\/02\/11\/umbraco-writelock-and-readlock-with-readerwriterlockslim\/","title":{"rendered":"Umbraco &#8211; WriteLock and ReadLock with ReaderWriterLockSlim"},"content":{"rendered":"<p>this post is to clear how to use WriteLock and ReadLock to make sure critical resources have been visited properly.<\/p>\n<p>Take the following code for example in &#8220;public abstract class ResolverBase<TResolver> : ResolverBase where TResolver : ResolverBase&#8221;.<\/p>\n<pre lang=\"csharp\" line=\"1\">\r\npublic static TResolver Current\r\n{\r\n  get\r\n    {\r\n      using (new ReadLock(ResolversLock))\r\n        {\r\n          if (_resolver == null)\r\n            throw new InvalidOperationException(string.Format(\"Current has not been initialized on {0}. You must initialize Current before trying to read it.\",\r\n                                                              typeof(TResolver).FullName));\r\n          return _resolver;\r\n        }\r\n    }\r\n\r\n  set\r\n    {\r\n      using (Resolution.Configuration)\r\n        using (new WriteLock(ResolversLock))\r\n        {\r\n          if (value == null)\r\n            throw new ArgumentNullException(\"value\");\r\n          if (_resolver != null)\r\n            throw new InvalidOperationException(string.Format(\"Current has already been initialized on {0}. It is not possible to re-initialize Current once it has been initialized.\",\r\n                                                              typeof(TResolver).FullName));\r\n          _resolver = value;\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\/\/The lock for the singleton.<br \/>\nstatic readonly ReaderWriterLockSlim ResolversLock = new ReaderWriterLockSlim();<br \/>\n&#8220;new WriteLock(ResolversLock)&#8221; is called, &#8220;ResolversLock&#8221; will be referenced by _rwLock. WriteLock constructor will enter lock automatically by &#8220;_rwLock.EnterWriteLock();&#8221;<\/p>\n<p>when it disposed by calling IDisposable.Dispose(), invoking &#8220;_rwLock.ExitWriteLock();&#8221; to exit WriteLock.<\/p>\n<p>&#8220;new ReadLock(ResolversLock)&#8221; is called, &#8220;ResolversLock&#8221; will be referenced by _rwLock. ReadLock constructor will enter lock automatically and exit readlock when disposed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>this post is to clear how to use WriteLock and ReadLock to make sure critical resources have been visited properly. Take the following code for example in &#8220;public abstract class ResolverBase : ResolverBase where TResolver : ResolverBase&#8221;. public static TResolver &hellip; <a href=\"http:\/\/windows.emacslisp.com\/index.php\/2016\/02\/11\/umbraco-writelock-and-readlock-with-readerwriterlockslim\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"_links":{"self":[{"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/posts\/80"}],"collection":[{"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":1,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/posts\/80\/revisions"}],"predecessor-version":[{"id":81,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/posts\/80\/revisions\/81"}],"wp:attachment":[{"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/media?parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/categories?post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/windows.emacslisp.com\/index.php\/wp-json\/wp\/v2\/tags?post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}