Ich versuche es zum ersten Mal, mit den neuen Tasks zu arbeiten, aber es passiert etwas, das ich nicht verstehe.
Zuerst der Code, der ziemlich einfach ist. Ich übergebe eine Liste von Pfaden zu einigen Bilddateien und versuche, einen Task hinzuzufügen, um jeden von ihnen zu verarbeiten:
public Boolean AddPictures(IList paths)
{
Boolean result = (paths.Count > 0);
List tasks = new List(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;
}
Ich habe festgestellt, dass, wenn ich dies einfach so laufen lasse, z.B. mit einer Liste von 3 Pfaden in einem Unit-Test, alle drei Tasks den letzten Pfad in der bereitgestellten Liste verwenden. Wenn ich durchgehe (und die Verarbeitung der Schleife verlangsame), wird jeder Pfad aus der Schleife verwendet.
Kann mir bitte jemand erklären, was passiert und warum? Mögliche Lösungsansätze?
3 Stimmen
Darf ich vorschlagen, ReSharper zu verwenden. Dieser spezielle Fehler und andere potenzielle Bugs werden für Sie hervorgehoben.