gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:26:48 26 4
gpt4 key购买 nike

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

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

除了项目不在列表中,还有什么情况会返回false?

例如,如果集合被锁定,它会返回false吗?还是会等到解锁后才移除元素?

最佳答案

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

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

在下面的代码中,当您调用 Remove 时很清楚它尝试获取锁,如果不成功,它将等待直到它可用。一旦可用,它将检查该项目是否仍然存在。如果不是,则返回 false .如果是,它将调用 RemoveAt .

这是支持我上面所说的 SynchronizedCollection<T> 的代码类的源代码:

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 );
}

关于c# - 在什么情况下 SynchronizedCollection<T>.Remove() 会返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com