Estoy haciendo un primer intento de jugar con las nuevas tareas, pero sucede algo que no entiendo.Iniciar tareas en foreach Utiliza el valor del último elemento
En primer lugar, el código, que es bastante directo. Paso en una lista de rutas de acceso a algunos archivos de imagen, e intento de añadir una tarea de procesar cada una de ellas:
public Boolean AddPictures(IList<string> paths)
{
Boolean result = (paths.Count > 0);
List<Task> tasks = new List<Task>(paths.Count);
foreach (string path in paths)
{
var task = Task.Factory.StartNew(() =>
{
Boolean taskResult = ProcessPicture(path);
return taskResult;
});
task.ContinueWith(t => result &= t.Result);
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
return result;
}
He descubierto que si me acaba de dejar esta carrera con, por ejemplo, una lista de 3 rutas en una prueba de unidad, las tres tareas usan la última ruta en la lista proporcionada. Si paso (y disminuyo el procesamiento del ciclo), se usa cada ruta desde el ciclo.
¿Alguien puede explicar lo que está sucediendo y por qué? ¿Posibles soluciones?
Puedo sugiere emplear ReSharper Este error en particular y otros errores potenciales se highlighten para usted –