Powershell 我应该把ScriptBlock放在foreach循环中吗?

Powershell 我应该把ScriptBlock放在foreach循环中吗?,powershell,Powershell,我正在设置一些并行化,并想知道将ScriptBlock放在foreach循环中是否有好处或坏处。就像这样 for ($currentJob = 0; $currentJob -le 20; $currentJob++) { $jobBlock = { param ([int] $runCount) Write-Host "running... $runCount" for($i = 0; $i -lt 100000; $i++ ) {

我正在设置一些并行化,并想知道将ScriptBlock放在foreach循环中是否有好处或坏处。就像这样

for ($currentJob = 0; $currentJob -le 20; $currentJob++) {
    $jobBlock = {
        param ([int] $runCount)
        Write-Host "running... $runCount"
        for($i = 0; $i -lt 100000; $i++ ) {
        }
    }

    Write-Host "Starting job for $currentJob"
    Start-Job -ScriptBlock $jobBlock -ArgumentList $running.Count
}
。。。还是在外面更好

$jobBlock = {
    param ([int] $runCount)
    Write-Host "running... $runCount"
    for($i = 0; $i -lt 100000; $i++ ) {
    }
}

for ($currentJob = 0; $currentJob -le 20; $currentJob++) {
    Write-Host "Starting job for $currentJob"
    Start-Job -ScriptBlock $jobBlock -ArgumentList $running.Count
}
我来自C世界,内部作业看起来像是丢失或覆盖了某些内容,或者不适当地留给了垃圾收集器


只是想知道PowerShell的细微差别。

由于您没有在$jobBlock中使用for语句中的任何变量,因此无需在每次循环中重新定义它;在外部定义它。

如果速度很重要,则使用运行空间而不是作业