Parallel.ForEach重复数据

时间:2016-12-15 18:38:09

标签: c# parallel-processing parallel.foreach

我有一个奇怪的情况,看:

public List<Car> GetCars(List<Entity> entities)
{
    List<Car> cars = new List<Car>();

    Parallel.ForEach(entities, entity =>
    {
        var car = ConvertToCar(entity);

        lock(cars)
        {
            cars.Add(car);
        }
    });
}

当我在4 cars之后查看Parallel.ForEach列表entities之后,我得到了4辆相同的汽车。如果我在Parallel.ForEach内放置一个断点,经过4次迭代(4种不同的entities),我现在得到了4种不同的汽车。所以为什么?我错过了什么?

编辑和解决方案

你知道你什么时候因为在你面前的某些事情而失去了一整天?谢谢@juharr。这段代码是遗留代码,在ConvertToCar方法中,我没有看到:

public Car ConvertToCar(Entity entity)
{
    newCar = new Car();
    newCar.Id = entity.id;
    newCar.Color = entity.color;
    [...]

    return newCar;
}

查看newCar,是遗留代码中的新车,新车是全局变量。这就是问题所在。当我改为var newCar = new Car();时,一切都还可以!

0 个答案:

没有答案