首页 > 解决方案 > 使用 Start-Process 时 Invoke-Parallel 正在等待

问题描述

有谁知道为什么Invoke-Parallel不是多线程?当我运行这个循环时,它不会启动下一个脚本块,直到前一个脚本块完成。

注意我也在PoshRSJob上试过这个。

我正在为找到的每个文件运行一个 Java jar 文件。如果你看这里,他们正在使用 Start-Process 命令并等待 rar.exe。

 . .\Invoke-Parallel.ps1

 $ScriptBlock = {
        start-Process -file java -ArgumentList @('-jar',"a:\conversion.jar",$_.FullName,"$($_.FullName).tmp") -Wait
 }

 ForEach ($file in (GCI -Path b:\*)) {
   Invoke-Parallel -InputObject $file -ScriptBlock $ScriptBlock -Throttle 5 
 }

*请注意,这只是一个简单的示例,我的原始脚本更复杂,但我将其缩小到此条目,这导致多线程不是多线程。

标签: multithreadingpowershell

解决方案


这些多线程工具(Invoke-ParallelPoshRSJob)需要流水线

我没有流水线化我的原始代码,因为我认为使用循环更干净。但是使用管道确实有效。

. .\Invoke-Parallel.ps1

$ScriptBlock = {
  start-Process -file java -ArgumentList @('-jar',"a:\conversion.jar",$_.FullName,"$($_.FullName).tmp") -Wait
 }

(GCI -Path b:\*) | Invoke-Parallel -InputObject $_ -ScriptBlock $ScriptBlock -Throttle 5

推荐阅读