Я бы не стал делать это с фазами. Я бы подумал не делать этого вообще. Восстановление пакетов (независимо от их типа) - операция, связанная с вводом / выводом - вряд ли вы многого выиграете от ее распараллеливания. На самом деле, это может быть медленнее. Большая часть времени, потраченного на восстановление пакетов, - это либо ожидание загрузки файла, либо копирование файлов на диск. Загрузка в два раза больше файлов просто занимает вдвое больше времени. Копирование двух файлов одновременно занимает вдвое больше времени. Это, конечно, грубо говоря - в некоторых случаях это может быть немного быстрее, но вряд ли это будет значительно быстрее для среднего случая.
Тем не менее, вы могли бы написать сценарий для выделения двух отдельных заданий и ждать их завершения. Примерно так, в PowerShell:
$dotnetRestoreJob = (Start-Job -ScriptBlock { dotnet restore } ).Id
$npmRestoreJob = (Start-Job -ScriptBlock { npm install } ).Id
do {
$jobStatus = Get-Job -Id @($dotnetRestoreJob, $npmRestoreJob)
$jobStatus
Start-Sleep -Seconds 1
}
while ($jobStatus | where { $_.State -eq 'Running' })
Конечно, вы, вероятно, захотите захватить выходные данные из заданий и проверить, был ли код завершения успешным или код завершения сбоя, но это общая идея.