ConcurrentBag和foreach

时间:2014-07-18 06:18:01

标签: c# multithreading foreach parallel-processing parallel.foreach

我见过ConcurrentBag和Parallel.ForEach用于另一个问题。现在我想知道如果我使用常规foreach而不是Parallel.ForEach从ConcurrentBag读取数据,它是否仍然是线程安全的。

因此,即使其他线程正在向ConcurrentBag添加数据并从中删除数据,我想在特定的线程中查看包中的所有项目(它甚至可以是该包的快照,因为它不必是100 %是最新的)并使用找到的其他数据。

所以我的问题是这是一个正常的foreach,可以在不破坏ConcurrentBag的线程安全的情况下使用或者我是否必须使用arallel.ForEach?

1 个答案:

答案 0 :(得分:3)

对于您的方案,您是否使用foreachParallel.ForEach评估某个集合并没有任何区别。很多事情都是如此。 Parallel.ForEach并没有神奇地将枚举数放入一些特殊的线程安全模式。

From the fine manual

  

说明

     

枚举表示行李内容的即时快照。调用GetEnumerator后,它不会反映对集合的任何更新。该枚举器可以安全地与读取和写入包同时使用。

相关问题