Итак, у вас есть утверждение, которое выглядит примерно так? (основываясь на ваших комментариях выше).
Parallel.Foreach(myData, ..., (d) =>
{
StringBuilder sb = new StringBuilder();
sb.Append(d);
// WriteLine sb?
});
У этого подхода есть ряд проблем.
- Ни
Parallel.For
, ни Parallel.ForEach
не гарантируют, что ваш доступ к содержимому myData
будет доступен в любом конкретном порядке.
- если вы используете метод на консоли или общий
StringBuilder
либо вывести результаты, либо создать полную строку, то вы
вероятно блокируют общий ресурс, эффективно сериализуя
части вашего параллельного цикла.
Трудно сказать больше, не видя конкретного примера вашего кода. В зависимости от того, что вы делаете, вы можете использовать сохранение порядка AsOrdered()
в PLINQ, чтобы получить то, что вам нужно.
См. этот ресурс MSDN и
Заказано PLINQ ForAll
Это позволит вам вернуть упорядоченный набор результатов на основе порядка ввода, но не гарантирует порядок фактической обработки.
Однако если параллельный запрос блокирует вызов в теле, вы вряд ли получите хорошую производительность.