使用通用列表进行线程处理

时间:2011-08-19 07:19:31

标签: c# multithreading list generics

我是线程世界的新手,我对线程的了解较少(不)。请给我支持以解决我的下一个问题。

  1. 我有2个通用列表(list1,list2)
  2. 我将通过list1
  3. 进行迭代
  4. 进行一些处理并需要将结果存储在list2中
  5. 我需要在给定的线程数中逐批处理list1中的项目,将所有输出存储在单个列表中(list2)

    Q1 即可。如何从list1批量生成并提供给线程?
    Q2 即可。我们如何识别一个胎面何时完成其操作? 的 Q3 即可。我们如何给下一个项目完成胎面?
    Q4 即可。是否会导致访问list2的问题(因为它被多个线程访问)?

2 个答案:

答案 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更深入地讨论这个话题。