public void AcquireReaderLock(int expectedFailureHResult = 0)
{
PerformLockAction(
expectedFailureHResult,
true /* isBlockingOperation */,
() => _rwl.AcquireReaderLock(GetTimeoutMilliseconds(expectedFailureHResult)),
() =>
{
if (_writerThreadID == Environment.CurrentManagedThreadId)
{
// Write lock is already held, acquire a write lock recursively instead
Assert.NotEqual(0, _writerLevel);
++_writerLevel;
}
else
{
++ThreadReaderLevel;
}
});
}