【发布时间】:2016-05-17 18:08:18
【问题描述】:
在我的代码的并行部分中,我将每个线程的结果保存到 ConcurrentBag。但是,当这完成后,我需要遍历每个结果并通过我的评估算法运行它们。正常的 foreach 会真正遍历所有成员,还是需要特殊代码?我也考虑过使用队列而不是袋子之类的东西,但我不知道哪个最好。在并行代码的末尾,袋子通常只包含 20 件左右的物品。
即,实际上会为 ConcurrentBag 的所有成员访问并运行 foreach 吗?
ConcurrentBag futures = new ConcurrentBag();
foreach(move in futures)
{
// stuff
}
【问题讨论】:
-
因为它是 IEnumerable 你应该能够在 ConcurrentBag 上使用 foreach
-
我添加了示例代码。我问是因为使用 ConcurrentBag 无法保证您的物品以任何特定顺序出现。
-
我还需要查看填充此并发包的代码......并且并发包已经由线程填充?或者您打算在其他线程仍在更新 ConcurrentBag 时执行 foreach?
-
并发包在填充后会被查看。此时只有一个线程会触及它。
标签: c# foreach parallel-processing parallel.foreach