У меня есть проект MSBuild, в котором у меня есть задача, которая вызывает несколько проектов, где я устанавливаю BuildInParallel = "true"
Пример:
<Message Text="MSBuild project list = @(ProjList)" />
<!-- Compile in parallel -->
<MSBuild Projects="@(ProjList)"
Targets="Build"
Properties="Configuration=$(Configuration)"
BuildInParallel="true" />
Эти подпроекты фактически вызывают инструмент командной строки для фактического «построения» - назовите его compile.exe. Выполнение грубого профилирования (спасибо taskmgr.exe) процесса сборки приводит к следующим результатам:
на основе параметра / m - я вижу точное число запущенных процессов MSBuild.exe, что, конечно, ожидается - общее число доступных одновременных процессов сборки.
Однако то, что я ожидаю увидеть, - это количество процессов compile.exe. По сути, каждый процесс MSBuild просто оборачивается и вызывает compile.exe. Я вижу, что запускается несколько файлов compile.exe, затем они медленно заканчивают работу, пока я не увижу только один единственный файл compile.exe. Задачи, выполняемые каждым файлом compile.exe, занимают разное количество времени, поэтому ожидается, что одна из них займет намного больше времени, чем другие.
Однако никакие другие compile.exe не создаются до тех пор, пока не будет завершен первый пакет. Другими словами, если у меня есть / m: 4 - я буду видеть 4 файла compile.exe, пока все не будет завершено, тогда будут появляться еще 4.
Это не совсем параллельно мне. Кто-нибудь еще видел такое поведение? Я просто что-то неправильно понимаю?