public void Dispose() { if (Interlocked.CompareExchange(ref _release, Released, UnReleased) == UnReleased) { switch (Flags) { case LatchFlags.Read: Latch.ExitReadScope(); break; case LatchFlags.Write: Latch.ExitWriteScope(); break; case LatchFlags.RWRead: Latch.ExitReadWriteScope(); break; case LatchFlags.RWWrite: Latch.ExitWriteScope(); Latch.ExitReadWriteScope(); break; } } }