如何清除ConcurrentBag
?它没有任何像Clear
或RemoveAll
这样的方法...
发布于 2011-03-21 20:06:42
尽管由于潜在的竞态条件,它可能不完全清楚,但这就足够了:
while (!myBag.IsEmpty)
{
myBag.TryTake(out T _);
}
发布于 2013-06-27 02:04:08
选择的答案是一种变通方法,所以我添加了我自己的变通方法。
我的解决方案是查看System.Collections.Concurrent名称空间中的所有可用集合,找到一个可以轻松清除集合中所有元素的集合。
ConcurrentStack类有一个Clear()方法,该方法删除集合中的所有元素。事实上,它是名称空间(目前)中唯一具有此功能的集合。是的,你必须使用Push(T element)
而不是Add(T element)
,但坦率地说,这是值得节省的时间。
发布于 2014-09-12 21:01:50
本着变通的精神..ConcurrentDictionary<T, bool>
具有原子清晰度,但也允许您快速检查键是否存在。“‘Quickly”当然是一个相对的术语,但根据您的使用情况,它可能比枚举大型堆栈更快。
https://stackoverflow.com/questions/5377296
复制相似问题