2012-01-25 63 views
1

我有這樣的Parallel.For代碼:的Parallel.For循環相同的項目

foreach (string g in allGames) 
{ 
    eventsList.Add(game); 
} 

eventsList.Distinct(); 

Parallel.For(0, eventsList.Count, i => 
       { 
        Console.WriteLine(eventsList[i]); 
       }); 

的allGames陣列包含以下字符串:

String A: Lee, Stephen - Cope, Jamie 
String B: Carter, Ali - Stevens, M 
String C: Dott, G - McManus, Alan 
String D: Bingham, S - Liu Song 
String E: Davis, Mark - Joyce, Mark 
String F: Walden, R - Liu Chuang 

我的結果是這樣的:

Game: Lee, Stephen - Cope, Jamie 
Game: Lee, Stephen - Cope, Jamie 
Game: Lee, Stephen - Cope, Jamie 
Game: Lee, Stephen - Cope, Jamie 
Game: Carter, Ali - Stevens, M 
Game: Dott, G - McManus, Alan 
Game: Bingham, S - Liu Song 
Game: Davis, Mark - Joyce, Mark 
Game: Walden, R - Liu Chuang 

它看起來像它在相同的迭代4次(它在代碼中發生了很多次)。

我確認eventsList列表不包含任何重複,即100%確認。

任何線索我該如何解決這個問題,使其在每個元素上只能使用一次?

謝謝!

+2

'eventsList.Distinct();'這一行沒有太大的作用。你的意思是'eventsList = eventsList.Distinct();'? –

+0

做'.Distinct()'時,會返回一個新的對象,而不是改變列表。另外,你似乎在'allGames.Count()'次列表中添加了'game'對象(你的局部變量被稱爲'g',而不是'game')。 –

回答

4

這可能是問題 - 或者至少是在你的代碼中的錯誤:

eventsList.Distinct(); 

這並不做任何事情 - 像所有其他LINQ的運營商,它返回一個新的序列,而不是修改現有的。嘗試:

eventsList = eventsList.Distinct().ToList(); 

我知道你你是100%肯定列表不包含任何重複的 - 但在這種情況下,你不會需要不同的電話,你會嗎?無論哪種方式,這是一個無用的代碼行。

你給的Parallel.For代碼是好的,但它會與Parallel.ForEach是整潔:

Parallel.ForEach(eventsList, Console.WriteLine); 

如果還是失敗,請發表一個簡短而完整程序演示問題。

+0

嗨,謝謝,我解決了這個問題,但同樣的錯誤出現了!正如我所說的,我確認了這個列表(只是使用了一個調試器) –

+1

+1 - Dammit Skeeted'd了! –

+2

@HarisHasan:如果我有一個美元,每次OP聲稱他們100%確定問題*不是X,但結果竟然是X ... –