C# 如果持有ReadWriteSlimlock,请执行其他操作
我已经实现了ReaderWriterLockSlim,现在我不希望它在锁处等待。如果锁上了,我想做点别的事 我考虑过使用is-iswriterlockhold,但这对我来说没有多大意义,因为如果两个线程同时进入并同时输入if语句,那么仍有一个线程会在锁处等待 这是我的密码C# 如果持有ReadWriteSlimlock,请执行其他操作,c#,multithreading,C#,Multithreading,我已经实现了ReaderWriterLockSlim,现在我不希望它在锁处等待。如果锁上了,我想做点别的事 我考虑过使用is-iswriterlockhold,但这对我来说没有多大意义,因为如果两个线程同时进入并同时输入if语句,那么仍有一个线程会在锁处等待 这是我的密码 ReaderWriterLockSlim rw = GetLoadingLock(parameters); rw = GetLoadingLock(parameters); try { rw.EnterWriteLock(
ReaderWriterLockSlim rw = GetLoadingLock(parameters);
rw = GetLoadingLock(parameters);
try
{
rw.EnterWriteLock();
item = this.retrieveCacheItem(parameters.ToString(), false);
if (item != null)
{
parameters.DataCameFromCache = true;
// if the data was found in the cache, return it immediately
return item.data;
}
else
{
try
{
object loaditem = null;
itemsLoading[parameters.ToString()] = true;
loaditem = this.retrieveDataFromStore(parameters);
return loaditem;
}
finally {
itemsLoading.Remove(parameters.ToString());
}
}
}
finally
{
rw.ExitWriteLock();
}
谁能用这个给我指引正确的方向
谢谢为什么不使用0的timeoutTimeSpan
如果超时为0(零),则此方法
检查锁状态并返回
如果需要,则立即为false
状态不可用
可以使用的重载将超时作为参数。如果超过零,如果无法获取锁,它将立即返回
if(rw.TryEnterWriteLock(0))
{
// do something with the lock held (don't forget to use a try/finally)
}
else
{
// do something if the lock fails
}
另一方面,您为什么要分配
rw
两次
ReaderWriterLockSlim rw = GetLoadingLock(parameters);
rw = GetLoadingLock(parameters); // This line is probably redundant
如果您正在使用
字典
进行项目阅读
,则可以使用