powershell - 如何停止并行线程
问题描述
如果其中一个线程完成,我想停止所有线程。像Kill-AllThreads 之类的东西。
电源外壳:
workflow Test{
function writeFile($c, $n){
$path = "$env:temp\workflow_$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:temp\workflow_i.txt"
start "$env:temp\workflow_k.txt"
PowerShell 核心:
((5,'i'), (10,'k'))|ForEach-Object -Parallel{
$c, $n = $_
$path = "$env:temp\workflow_$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:temp\workflow_i.txt"
start "$env:temp\workflow_k.txt"
我希望i - finished
在控制台中;i-1..5和k-1..5在文件中。
解决方案
嗯,这是一种根据输出数量(powershell 7)杀死管道的方法。它创建了 10 个随机休眠的线程,然后在接收到第一个线程的输出时终止管道。
1..10 | foreach -parallel { $a = random -max 10 -min 1; sleep $a; $a } |
select -first 1
2
推荐阅读
- php - 如何从循环中获取值到刀片 - laravel
- c++11 - 如何正确使用具有 condition_variable 的原子类型以避免在轻松的原子读取期间锁定
- node.js - 添加文件时监视文件夹并将文件名写入某个文件
- tensorflow - 当我使用 tensorflow_gpu 时,Dlib 不使用 GPU
- r - 有效地找到数据表的第一个非零元素(对应列)
- python - 如何使带有 TF 后端的 Keras 使用 CPU 而不是 GPU?
- ruby-on-rails - Rails 管理员未使用 Cancancan 或 Devise 进行身份验证
- r - UpsetR:添加数字标签以设置绘图大小
- go - 如何从这个站点下载 Protocol Buffers v3?
- c++ - 关于正确编译和运行代码的 Makefile “错误 1”