Какие объекты блокировать при использовании Parallel.For / ForEach? - PullRequest
0 голосов
/ 04 марта 2020

Где именно я должен использовать блокировку объектов?

    List<Car> cars = _repository.GetCars();

    List<CarModel> carModels = new List<CarModel>();

    Parallel.For(0, cars.Count(), new ParallelOptions { MaxDegreeOfParallelism = 4 },
        index =>
        {
            using (UnitOfWork uow = new UnitOfWork(UnitOfWorkNestingOption.CreateNewIndependentRoot))
            {
                uow.TransactionIsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;

                Car car = cars[index];

                CarModel carModel = new CarModel();
                carModel.Colour = car.Colour;


                carModel.Wheels = new List<Wheels>();
                foreach (var wheel in car.Wheels)
                {
                    Wheel wheelCopy = new Wheel();
                    wheelCopy.Brand = wheel.Brand;

                    carModel.Wheels.Add(wheelCopy);
                }

                carModels.Add(carModel);
            }

        });

Какой .Добавить в список, я должен заблокировать? Нужно ли блокировать список, созданный внутри l oop

carModel.Wheels.Add(wheelCopy);

, или мне нужно заблокировать только список, инициализированный за пределами l oop?

* 1008? *

Или мне не нужно ничего блокировать?

...