我是線程世界的新手,我對線程的思想較少(不)。請給我支持解決我的下列問題。線程與通用列表
- 我有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