Esencialmente, estoy trabajando con esto:¿Es seguro utilizar este hilo de Parallel.ForEach()?
var data = input.AsParallel();
List<String> output = new List<String>();
Parallel.ForEach<String>(data, line => {
String outputLine = "";
// ** Do something with "line" and store result in "outputLine" **
// Additionally, there are some this.Invoke statements for updating UI
output.Add(outputLine);
});
de entrada es un objeto List<String>
. La instrucción ForEach()
realiza algún procesamiento en cada valor, actualiza la interfaz de usuario y agrega el resultado al output
List
. ¿Hay algo intrínsecamente incorrecto en esto?
Notas:
- orden de salida es poco importante
Actualización:
base en la retroalimentación que he recibido, he añadido un manual para lock
la instrucción output.Add
, así como también el código de actualización de la interfaz de usuario.
¿Cuál es su definición de Thread safe? ¿El orden en materia de salida es importante? Ayudaría si le das todo el código circundante. –
@Sanjeevakumar Hiremath: Lo siento, debería haber incluido esos detalles. –
He editado mi respuesta para mostrar una forma que no implique 'lock' etc. –