Siempre y cuando solo modifique el contenido del elemento que se transfiere al método, no es necesario el bloqueo.
(por supuesto siempre que no hay referencia duplicado en la lista, es decir, dos referencias a la misma FileMemberEntity
ejemplo.)
Si es necesario modificar la lista en sí, crear una copia que se puede repetir, y use un candado cuando modifique la lista:
List<FileMemberEntity> fileInfo = getList();
List<FileMemberEntity> copy = new List<FileMemberEntity>(fileInfo);
object sync = new Object();
Parallel.ForEach(copy, fileMember => {
// do something
lock (sync) {
// here you can add or remove items from the fileInfo list
}
// do something
});
Se le recuerda preguntas singular. –
¿Está modificando algo en su ciclo foreach? si no, entonces probablemente no haya preocupación por la seguridad del hilo. Si está modificando, deberá realizar un bloqueo – Didaxis
¿Puedo usar una colección diferente y no necesito un bloqueo? –