¿Es seguro este uso del hilo Parallel.ForEach ()?

Esencialmente, estoy trabajando con esto:

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);
});

Input es unaList<String> objeto. LosForEach()a instrucción @ procesa un poco cada valor, actualiza la interfaz de usuario y agrega el resultado a laoutput List. ¿Hay algo inherentemente malo en esto?

Notas:

l orden de salida essin importanci

Actualizar

De acuerdo con los comentarios que recibí, agregué un manuallock aloutput.Add, así como al código de actualización de la interfaz de usuario.

Respuestas a la pregunta(3)

Su respuesta a la pregunta