самый простой способ использовать
parallel for each, но есть минусы, к примеру во время обработки изменять коллекцию нежелательно.
способ получше это построение очереди, то есть выдергивать объекты из списка и кидать в другой список, и уже на другой список вешать обработчики, по 1 на каждый элемент списка. По мере исполнения каждого обработчика переписывать элемент на 1 из общей кучи.
Первый способ простой, нужно заменить пару строк, второй способ лучше, но сложней. По нему делают все нормальные серверы обработки.