c# – 在什么情况下SynchronizedCollection.Remove()会返回false
发布时间:2020-12-15 08:02:08 所属栏目:百科 来源:网络整理
导读: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. 除了项目不在列表中之外,在其他情况下这
SynchronizedCollection< T> .Remove()(
https://msdn.microsoft.com/en-us/library/ms619895(v=vs.110).aspx)的MSDN文档声明此函数返回
除了项目不在列表中之外,在其他情况下这将返回错误吗? 例如,如果集合被锁定,它会返回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 ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |