In a previous project, I became a big fan of System.Threading.ReaderWriterLockSlim. It was an excellent way to guard a resource against concurrency in a relatively flexible manner.
C# has a lock(object) {} syntax for simple concurrency locks, but what if you have a resource that can sometimes be used concurrently, and other times, exclusively?
Enter System.Threading.ReaderWriterLockSlim. This has a few handy methods on it for guarding code on a non-exclusive (Read) and exclusive (Write) mode, with an upgradeable lock, as well, so you don’t have to release a read lock in order to upgrade it.
This source works just as well in .NET as UWP.
I commented the code enough to try to make it so that someone familiar with ReaderWriterLockSlim and using(IDisposable){} would understand the rest, so without further ado…
https://gist.github.com/GraniteStateHacker/e608eecce2cb3dba0dbf4363b00e941f.js