Xod*_*rap 9 .net c# locking readerwriterlockslim
我喜欢C#中的快捷方式lock(myLock){ /* do stuff */}.是否有读/写锁的等价物?(特别是ReaderWriterLockSlim.)现在,我使用以下自定义方法,我认为它有效,但有点烦人,因为我必须将我的操作作为匿名函数传递,我宁愿使用标准锁定机制,如果可能的话.
void bool DoWithWriteLock(ReaderWriterLockSlim RWLock, int TimeOut, Action Fn)
{
bool holdingLock = false;
try
{
if (RWLock.TryEnterWriteLock(TimeOut))
{
holdingLock = true;
Fn();
}
}
finally
{
if (holdingLock)
{
RWLock.ExitWriteLock();
}
}
return holdingLock;
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*son 14
您无法覆盖lock关键字的行为.一种常见的技术是劫持using关键字.
DoWithWriteLock返回IDisposableTryEnterWriteLock调用保留在DoWithWriteLock方法内IDisposable.在该对象的Dispose方法中,将调用放入ExitWriteLock.最终结果:
// Before
DoWithWriteLock(rwLock,
delegate
{
Do1();
Do2()
} );
// After
using (DoWithWriteLock(rwLock))
{
Do1();
Do2();
}
Run Code Online (Sandbox Code Playgroud)