I am making a first attempt at playing with the new Tasks, but something is happening that I don't understand.
First, the code, which is pretty straight-forward. I pass in a list of paths to some image files, and attempt to add a task to process each of them:
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;
}
I've found that if I just let this run with, say, a list of 3 paths in a unit test, all three tasks use the last path in the provided list. If I step through (and slow down the processing of the loop), each path from the loop is used.
Can somebody please explain what is happening, and why? Possible workarounds?
 
     
     
     
    