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