요즘 이것에 대한 많은 답변이 있습니다.
- 작업 (또는 PS 6/7 또는 모듈의 스레드 작업)
- 시작 프로세스
- 워크 플로우
- 다른 실행 공간이있는 powershell API
- 여러 컴퓨터에서 invoke-command (모두 localhost 일 수 있음) (관리자 여야 함)
- ISE의 다중 세션 (런 스페이스) 탭 또는 원격 powershell ISE 탭
- Powershell 7에는
foreach-object -parallel
# 4에 대한 대안이 있습니다.
문자 그대로 foreach -parallel을 사용하는 워크 플로는 다음과 같습니다.
workflow work {
foreach -parallel ($i in 1..3) {
sleep 5
"$i done"
}
}
work
3 done
1 done
2 done
또는 병렬 블록이있는 워크 플로우 :
function sleepfor($time) { sleep $time; "sleepfor $time done"}
workflow work {
parallel {
sleepfor 3
sleepfor 2
sleepfor 1
}
'hi'
}
work
sleepfor 1 done
sleepfor 2 done
sleepfor 3 done
hi
다음은 runspaces 예제가있는 API입니다.
$a = [PowerShell]::Create().AddScript{sleep 5;'a done'}
$b = [PowerShell]::Create().AddScript{sleep 5;'b done'}
$c = [PowerShell]::Create().AddScript{sleep 5;'c done'}
$r1,$r2,$r3 = ($a,$b,$c).begininvoke() # run in background
$a.EndInvoke($r1); $b.EndInvoke($r2); $c.EndInvoke($r3) # wait
($a,$b,$c).streams.error # check for errors
($a,$b,$c).dispose() # clean
a done
b done
c done
receive-job (wait-job ($a = start-job { "heyo!" })); remove-job $a
또는 작업이 완료되기 전에$a = start-job { "heyo!" }; wait-job $a; receive-job $a; remove-job $a
전화를 걸면receive-job
아무것도 얻지 못할 수도 있습니다.