<p>This seems very noisy to me. Five lines of overhead is just too much.</p>

<pre><code>m_Lock.EnterReadLock()
Try
    Return m_List.Count
Finally
    m_Lock.ExitReadLock()
End Try
</code></pre>

<p>So how would you simply this?</p>

I ended up doing this, but I'm still open to better ways or flaws in my design.
```
```
Using m_Lock.ReadSection
    Return m_List.Count
End Using
```
```
This uses this extension method/class:
```
```
<Extension()> Public Function ReadSection(ByVal lock As ReaderWriterLockSlim) As ReadWrapper
    Return New ReadWrapper(lock)
End Function

Public NotInheritable Class ReadWrapper
    Implements IDisposable

    Private m_Lock As ReaderWriterLockSlim
    Public Sub New(ByVal lock As ReaderWriterLockSlim)
        m_Lock = lock
        m_Lock.EnterReadLock()
    End Sub
    Public Sub Dispose() Implements IDisposable.Dispose
        m_Lock.ExitReadLock()
    End Sub

End Class
```
```