Параллельное выполнение нескольких задач exec

Я дозирую несколько exec задачи в процессе сборки. Каждое выполнение занимает около одной минуты, поэтому я хотел бы запустить их параллельно, чтобы улучшить общую производительность сборки.

Цель, которая запускается несколько exec задачи:

<Target Name="CreatePackages" DependsOnTargets="Build" AfterTargets="Build">
  <Exec Command="SomeExecutable.exe %(SomeGroup.Location) </Exec>
</Target>

ItemGroup определение:

<ItemGroup>
  <SomeGroup Include="Production">
    <Location>SomePath/Production</Location>
  </SomeGroup>
  <SomeGroup Include="Test">
    <Location>SomePath/Test</Location>
  </SomeGroup>
  <SomeGroup Include="Development">
    <Location>SomePath/Development</Location>
  </SomeGroup>
</ItemGroup>

Как мне запустить эти exec задачи параллельно?

1 ответ

Решение

MSBuild не распараллеливается на уровне задач или целей, а только на уровне проекта. Вы можете выбрать обертывание каждого отдельного местоположения в целевом объекте и вызвать сам проект параллельно (грязно) или написать пользовательское задание с помощью TPL (System.Threading.Tasks.Parallel) а также Microsoft.Build.Tasks.Exec или же System.Diagnostics.Process (легко), или попробуйте YieldDuringToolExecution (технически не распараллеливание, но другие задачи будут ждать меньше).

Другие вопросы по тегам