如何解决从BlockingCollection中移除项目
| 如何从BlockingCollection中删除项目?以下哪项是正确的?myBlockingCollection.Remove(Item);
要么
myBlockingCollection.Take(Item);
解决方法
您无法指定要从
BlockingCollection<T>
中删除的特定项目。
Take()
方法从基础集合中删除一个项目并返回删除的项目。
TryTake(out T item)
方法从基础集合中删除一个项目,并将删除的项目分配给out
参数。如果可以删除某项,则该方法返回true;否则,该方法返回true。否则为假。
删除的项目取决于BlockingCollection<T>
使用的基础集合-例如,ConcurrentStack<T>
具有LIFO行为,ConcurrentQueue<T>
具有FIFO行为。
,我认为只有TryTake()是一个选择?我在MSDN上的Remove()方法上找不到文档。
,这段代码呢? -工作正常,但更改了收藏顺序。 (而且我没有在多线程状态下检查过它)。
public static bool Remove<T>(this BlockingCollection<T> self,T itemToRemove)
{
lock (self)
{
T comparedItem;
var itemsList = new List<T>();
do
{
var result = self.TryTake(out comparedItem);
if (!result)
return false;
if (!comparedItem.Equals(itemToRemove))
{
itemsList.Add(comparedItem);
}
} while (!(comparedItem.Equals(itemToRemove)));
Parallel.ForEach(itemsList,t => self.Add(t));
}
return true;
}
,我认为10英镑可以用。在BlockingCollection类中不存在Remove,并且Take不将item作为参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。