Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果持有ReadWriteSlimlock,请执行其他操作_C#_Multithreading - Fatal编程技术网

C# 如果持有ReadWriteSlimlock,请执行其他操作

C# 如果持有ReadWriteSlimlock,请执行其他操作,c#,multithreading,C#,Multithreading,我已经实现了ReaderWriterLockSlim,现在我不希望它在锁处等待。如果锁上了,我想做点别的事 我考虑过使用is-iswriterlockhold,但这对我来说没有多大意义,因为如果两个线程同时进入并同时输入if语句,那么仍有一个线程会在锁处等待 这是我的密码 ReaderWriterLockSlim rw = GetLoadingLock(parameters); rw = GetLoadingLock(parameters); try { rw.EnterWriteLock(

我已经实现了ReaderWriterLockSlim,现在我不希望它在锁处等待。如果锁上了,我想做点别的事

我考虑过使用is-iswriterlockhold,但这对我来说没有多大意义,因为如果两个线程同时进入并同时输入if语句,那么仍有一个线程会在锁处等待

这是我的密码

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的timeout
TimeSpan

如果超时为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

如果您正在使用
字典
进行
项目阅读
,则可以使用