如果其中一个线程完成,我想停止所有线程。比如Kill-AllThreads.
PowerShell:
workflow Test{
function writeFile($c, $n){
$path = "$env:tempworkflow_$n.txt"
Remove-Item $path -ea 0
while($true){
$i++
"$n-$i"|Out-File $path -Append
if($i -eq $c){"$n - finished";Kill-AllThreads;break}
}
}
parallel {
writeFile 5 i
writeFile 10 k
}
}
test
start "$env:tempworkflow_i.txt"
start "$env:tempworkflow_k.txt"
PowerShell核心:
((5,'i'), (10,'k'))|ForEach-Object -Parallel{
$c, $n = $_
$path = "$env:tempworkflow_$n.txt"
Remove-Item $path -ea 0
while($true){
$i++
"$n-$i"|Out-File $path -Append
if($i -eq $c){"$n - finished";Kill-AllThreads;break}
}
}
start "$env:tempworkflow_i.txt"
start "$env:tempworkflow_k.txt"
我期望i - finished
在控制台;5张。和k - 1 . . 5在文件。
嗯,这里有一种方法可以根据输出的数量杀死管道(powershell 7)。它创建10个线程,随机时间睡眠,然后在接收到第一个线程的输出时杀死管道。
1..10 | foreach -parallel { $a = random -max 10 -min 1; sleep $a; $a } |
select -first 1
2