我是线程世界的新手,我对线程的了解较少(不)。请给我支持以解决我的下一个问题。
我需要在给定的线程数中逐批处理list1中的项目,将所有输出存储在单个列表中(list2)
Q1 即可。如何从list1批量生成并提供给线程?
的 Q2 即可。我们如何识别一个胎面何时完成其操作?
的 Q3 即可。我们如何给下一个项目完成胎面?
的 Q4 即可。是否会导致访问list2的问题(因为它被多个线程访问)?
答案 0 :(得分:3)
Q1。如何从list1批量创建并提供给线程?
Parallel.ForEach
将是一个良好的开端; see MSDN
Q2。我们如何识别一个胎面何时完成其操作?
Parallel.ForEach
会处理这个问题;一旦ForEach退出,所有工作都已完成
Q3。我们如何将下一个项目提供给成品胎面?
再次,Parallel.ForEach
处理
Q4。是否会导致访问list2的问题(因为它被多个线程访问)?
是;所以要么在添加时同步访问权限(lock
等),要么使用ConcurrentBag<T>
答案 1 :(得分:2)
您可能正在寻找
中的课程System.Collections.Concurrent
命名空间。
Microsofts MSDN在多线程环境中听过一些关于列表的文章:Parallel programming series 您可能正在寻找它的最后一篇文章:Blocking Collection and the Producer-Consumer Problem
比尔·瓦格纳(Bill Wagner)有一篇更长,更专业的文章Concurrent Collections in the .NET Framework 4更深入地讨论这个话题。