c# – 在什么情况下SynchronizedCollection.Remove()会返回false?

SynchronizedCollection< T> .Remove()( https://msdn.microsoft.com/en-us/library/ms619895(v=vs.110).aspx)的MSDN文档声明此函数返回

true if item was successfully removed from the collection; otherwise,false.

除了项目不在列表中之外,在其他情况下这将返回错误吗?

例如,如果集合被锁定,它会返回false还是等到它被解锁才能删除该项?

解决方法

如果它可以获取锁定,然后如果该项目存在于集合中,它将返回true.否则它将返回false.

您可以调用Remove(),但是其他一些线程正在处理集合,您无法获得锁定.其他线程可能会在您获得锁定之前删除该项目.一旦你有一个锁,那时该项已被删除,因此它将返回false.

在下面的代码中,很明显当你调用Remove它尝试获取一个锁时,如果没有成功,它会等到它可用.一旦可用,它将检查该项目是否仍在那里.如果不是,则返回false.如果是,它将调用RemoveAt.

以下是从SynchronizedCollection< T>中支持上述内容的代码. class的源代码:

public bool Remove(T item) {
   lock( this.sync ) {
      int index = this.InternalIndexOf( item );
      if( index < 0 )
         return false;

      this.RemoveItem( index );
      return true;
   }
}

protected virtual void RemoveItem(int index) {
   this.items.RemoveAt( index );
}

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...