public static void ReaderWriterLock()
        {
            var obj     = new object();
            var holder1 = obj.AcquireReadLock(DefaultTimeout);

            if (holder1)
            {
            }
            else
            {
                throw new Exception();
            }

            var holder2 = obj.AcquireReadLock(DefaultTimeout);

            if (holder2)
            {
            }
            else
            {
                throw new Exception();
            }

            Throws <LockRecursionException>(() => obj.AcquireWriteLock(TimeSpan.Zero));
            holder1.Dispose();
            holder2.Dispose();

            holder1 = obj.AcquireWriteLock(TimeSpan.Zero);
            if (holder1)
            {
            }
            else
            {
                throw new Exception();
            }
            holder1.Dispose();
        }