2017-01-16 39 views
3

時,我有一個項目列表,通過它我循環使用PLINQ語句來增加特定用戶的總收入像下面創建一個線程安全的變量:通過使用像這樣使用PLINQ

double TotalEarnings = 0.0d; 
_SortedList.AsParallel().WithDegreeOfParallelism(5).ForAll(item => { 
TotalEarnings += Convert.ToDouble(item.SaleEarning); 
}); 

,我總是以不同的價值結束。我相信這是由於聲明的變量不是線程安全的。我怎樣才能解決這個問題?

P.S. _SortedList是一個通用集合(列表<>)...

回答

6

使用Sum來獲得使用PLINQ的總數。它將負責有效彙總總額,並且安全。

double TotalEarnings = _SortedList.AsParallel() 
    .WithDegreeOfParallelism(5) 
    .Sum(item => item.SaleEarning);