我正在嘗試使用groupby語句在其中並行查詢。查詢類似於Parallel.ForEach和IGrouping源項目問題
var colletionByWeek = (
from item in objectCollection
group item by item.WeekStartDate into weekGroups
select weekGroups
).ToList();
如果我使用Parallel.ForEach共享變量像下面,它工作正常。但我不想在並行查詢中使用共享變量。
var pSummary=new List<object>();
Parallel.ForEach(colletionByWeek, week =>
{
pSummary.Add(new object()
{
p1 = week.First().someprop,
p2= week.key,
.....
});
}
);
所以,我已經改變了上面的並行語句使用局部變量。但編譯器抱怨源類型<IEnumerable<IGrouping<DateTime, object>>
無法轉換爲System.Collections.Concurrent.OrderablePartitioner<IEnumerable<IGrouping<DateTime, object>>
。
我給錯了源類型?或者這種類型的IGouping類型處理方式不同?任何幫助,將不勝感激。謝謝!
Parallel.ForEach<IEnumerable<IGrouping<DateTime, object>>, IEnumerable<object>>
(spotColletionByWeek,
() => new List<object>(),
(week, loop, summary) =>
{
summary.Add(new object()
{
p1 = week.First().someprop,
p2= week.key,
.....
});
return new List<object>();
},
(finalResult) => pSummary.AddRange(finalResult)
);
列表不是線程安全的。改爲使用['ConcurrentBag'](http://msdn.microsoft.com/en-us/library/dd381779.aspx)。 –