На этот вопрос уже есть ответ здесь:
Я делаю первую попытку поиграть с новые Задачи, но что-то происходит, чего я не понимаю.
Во-первых, код, который довольно прост. Я передаю список путей к некоторым файлам изображений и пытаюсь добавить задачу для обработки каждого из них:
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;
}
Я обнаружил, что если я просто позволю этому запускаться, скажем, со списком из 3 путей в модуле test, все три задачи используют последний путь в предоставленном списке. Если я перейду (и замедлю обработку цикла), будет использован каждый путь из цикла.
Кто-нибудь может объяснить, что происходит и почему? Возможные обходные пути?