我正在尝试使用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)。 –