How do I pass 2 lists into Parallel.ForEach
?
Example:
List<Person> a = new List<Person>() { new Person(), new Person(), new Person() };
List<Car> b = new List<Car>() { new Car(), new Car(), new Car() };
//PSEUDO CODE
Parallel.ForEach(a, b, (person, car) => {
//WORK ON person, WORK ON car
});
I would prefer to avoid encapsulating Person and Car into Object container. Is this possible?
ForEach loop works like a Parallel. For loop. The loop partitions the source collection and schedules the work on multiple threads based on the system environment. The more processors on the system, the faster the parallel method runs.
The execution of Parallel. Foreach is faster than normal ForEach.
To use Parallel. ForEach loop we need to import System. Threading. Tasks namespace in using directive.
Parallel. ForEach uses managed thread pool to schedule parallel actions. The number of threads is set by ThreadPool.
If you're using .NET 4 (which you probably are) and you're trying to pair the first Person
with the first Car
etc, you can just use Zip
:
List<Person> a = new List<Person>() { new Person(), new Person(), new Person() };
List<Car> b = new List<Car>() {} { new Car(), new Car(), new Car() };
var zipped = a.Zip(b, (person, car) => new { person, car });
Parallel.ForEach(zipped, pair => {
Person person = pair.person;
Car car = pair.car;
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With