2011-08-19 52 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