Я пытаюсь распараллелить запрос с помощью оператора groupby. Запрос похож на
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)
);