Assuming you are using .Net 4.0+
If you have 2000 records and need to make 2000 related calls to a service of some sort, you can use this approach:
List<RecordType> records = GetMyRecords();
Parallel.ForEach(records, record => {
MakeMyServiceCall(record);
});
This will run the MakeMyServiceCall method for each indivdual record in parallel; the parallel library uses the ThreadPool threads behind the scenes which will transparently distribute the load over the available cores.