繁体   English   中英

并发包和foreach

[英]ConcurrentBag and foreach

我已经看到ConcurrentBag和Parallel.ForEach在另一个问题中使用了。 现在,我想知道是否使用常规的foreach代替Parallel.ForEach从ConcurrentBag读取数据是否仍然是线程安全的。

因此,即使其他线程正在向ConcurrentBag中添加数据或从ConcurrentBag中删除数据,我也希望在特定线程中浏览包中的所有项目(即使不是那个包,它也可以是快照,因为它不一定要100%日期),并将找到的数据用于其他内容。

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

对于您的方案,无论您是使用foreach还是Parallel.ForEach评估集合,都没有区别。 在很多事情上都是如此。 Parallel.ForEach不会神奇地将枚举数踢入某些特殊的线程安全模式。

从精美的手册中

备注

枚举表示袋子内容的即时快照。 调用GetEnumerator之后,它不会反映对该集合的任何更新。 枚举器可以安全地与袋子进行读写操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM