Мне нужно распараллелить метод, который выполняет исчерпывающее попарное сравнение элементов в списке. Последовательная реализация проста:
foreach (var element1 in list)
foreach (var element2 in list)
foo(element1, element2);
В этом случае foo не изменит состояние element1 или element2. Я знаю, что просто делать вложенные операторы Parallel.ForEach небезопасно:
Parallel.ForEach(list, delegate(A element1)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
});
Каким был бы идеальный способ реализовать это с помощью библиотеки параллельных задач?