2011-08-19 31 views
1

我是线程世界的新手,我对线程的思想较少(不)。请给我支持解决我的下列问题。线程与通用列表

  1. 我有2名泛型列表(列表1,列表2)
  2. 我会遍历低谷列表1
  3. 做一些处理,需要存储结果列表2

我需要处理在列表1项在给定数量的线程中按批次逐批存储所有输出(列表2)

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

+0

请显示一些代码...你到目前为止尝试过什么? – Yahia

+0

我有大的代码和更难(和不切实际)来显示在这里。正如我所说,我不知道如何使用线程来做到这一点。我的代码只能在一个单线程中工作,我需要做的就是使它成为多线程的 –

+0

var list2 = list1.AsParallel()。WithDegreeOfParallelism(BatchSize).Select(x => x.SomeProcessing())。ToList () – adrianm

回答

3

Q1。如何从list1进行批处理并提供线程?

Parallel.ForEach将是一个好的开始; see MSDN

Q2。我们如何识别一个胎面何时完成其操作?

Parallel.ForEach会处理的;一旦ForEach退出,所有工作都完成

Q3。我们如何给下一个项目完成踏面?

再次,Parallel.ForEach处理该

Q4。是否会导致list2访问问题(因为它被多个线程访问)?

是的;所以要么同步访问(lock等,同时添加),或使用ConcurrentBag<T>

+0

ForEach会逐个迭代,不是吗? 我需要在不同的线程中同时处理来自list1的多个项目。 –

+0

@Buddhi不,它不会 - 'Parallel.ForEach' - 提示是在“并行”一词中。请参阅MSDN:http://msdn.microsoft.com/en-us/library/dd992001.aspx –

+0

同意...使用Parallel.ForEach将解决您的问题,而不会导致您头痛:D – Jonathan