ConcurrentBag and foreach
本文关键字:foreach and ConcurrentBag | 更新日期: 2023-09-27 18:13:30
我看过ConcurrentBag和Parallel。ForEach在另一个问题中使用。现在我想知道如果我使用常规的foreach而不是并行,它是否仍然是线程安全的。从ConcurrentBag中读取数据。
因此,即使其他线程正在向ConcurrentBag添加数据和从ConcurrentBag中删除数据,我也希望在一个特定的线程中遍历包中的所有项目(它甚至可以是该包的快照,因为它不必是100%最新的),并将找到的数据用于其他目的。
所以我的问题是,是一个正常的foreach这里可行而不破坏ConcurrentBag的线程安全,或者我必须使用Parallel.ForEach?
对于您的场景,使用foreach
还是Parallel.ForEach
评估集合没有区别。很多事情都是如此。Parallel.ForEach
不会神奇地将枚举器踢入某种特殊的线程安全模式。
从精细手册:
<标题>评论枚举表示包中内容的某个时刻的快照。它不反映调用GetEnumerator后对集合的任何更新。该枚举数可以安全地并发地对袋子进行读写操作。
标题>