Sto facendo un primo tentativo di giocare con i nuovi compiti, ma qualcosa sta accadendo che non capisco.Attività iniziali nel ciclo foreach Utilizza il valore dell'ultimo elemento
In primo luogo, il codice, che è piuttosto semplice. Io passo in un elenco di percorsi di alcuni file di immagini, e si tenta di aggiungere un'attività per elaborare ciascuno di essi:
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;
}
Ho scoperto che se io lascio questa corsa con, diciamo, un elenco di 3 percorsi in un test unitario, tutte e tre le attività utilizzano l'ultimo percorso nell'elenco fornito. Se passo attraverso (e rallenta l'elaborazione del ciclo), viene utilizzato ogni percorso dal ciclo.
Qualcuno può spiegare cosa sta succedendo e perché? Possibili soluzioni alternative?
Posso suggerisco di usare ReSharper Questo particolare errore ed altri bug potenziali highlighten per voi –