我是线程世界的新手,我对线程的思想较少(不)。请给我支持解决我的下列问题。线程与通用列表
- 我有2名泛型列表(列表1,列表2)
- 我会遍历低谷列表1
- 做一些处理,需要存储结果列表2
我需要处理在列表1项在给定数量的线程中按批次逐批存储所有输出(列表2)
Q1。如何从list1进行批处理并提供线程?
Q2。我们如何识别一个胎面何时完成其操作?
Q3。我们如何给下一个项目完成踏面?
Q4。是否会导致list2访问问题(因为它被多个线程访问)?
我是线程世界的新手,我对线程的思想较少(不)。请给我支持解决我的下列问题。线程与通用列表
我需要处理在列表1项在给定数量的线程中按批次逐批存储所有输出(列表2)
Q1。如何从list1进行批处理并提供线程?
Q2。我们如何识别一个胎面何时完成其操作?
Q3。我们如何给下一个项目完成踏面?
Q4。是否会导致list2访问问题(因为它被多个线程访问)?
你可能会在
System.Collections.Concurrent
命名空间中寻找类。
微软MSDN已经发EMAIL:[email protected]关于列表中的某些文章在多线程环境:Parallel programming series 你可能会寻找它的最后一篇文章:由比尔·瓦格纳Blocking Collection and the Producer-Consumer Problem
有一个较长的和专门的文章Concurrent Collections in the .NET Framework 4说去对主题更深入。
Q1。如何从list1进行批处理并提供线程?
Parallel.ForEach
将是一个好的开始; see MSDN
Q2。我们如何识别一个胎面何时完成其操作?
Parallel.ForEach
会处理的;一旦ForEach退出,所有工作都完成
Q3。我们如何给下一个项目完成踏面?
再次,Parallel.ForEach
处理该
Q4。是否会导致list2访问问题(因为它被多个线程访问)?
是的;所以要么同步访问(lock
等,同时添加),或使用ConcurrentBag<T>
ForEach会逐个迭代,不是吗? 我需要在不同的线程中同时处理来自list1的多个项目。 –
@Buddhi不,它不会 - 'Parallel.ForEach' - 提示是在“并行”一词中。请参阅MSDN:http://msdn.microsoft.com/en-us/library/dd992001.aspx –
同意...使用Parallel.ForEach将解决您的问题,而不会导致您头痛:D – Jonathan
请显示一些代码...你到目前为止尝试过什么? – Yahia
我有大的代码和更难(和不切实际)来显示在这里。正如我所说,我不知道如何使用线程来做到这一点。我的代码只能在一个单线程中工作,我需要做的就是使它成为多线程的 –
var list2 = list1.AsParallel()。WithDegreeOfParallelism(BatchSize).Select(x => x.SomeProcessing())。ToList () – adrianm