use*_*666 6 parallel-processing powershell azure-blob-storage foreach-object
我对 ForEach-Object -Parallel 感到困惑。以下代码有包含超过 2000 个 blob 的 $blobs 数组。使用常规的foreach,我可以毫无问题地打印每个 blob 的名称。然后在第一个 foreach 之后使用ForEach-Object -Parallel ,不会打印任何内容。为什么 ?
foreach ($blob in $blobs) {
           Write-Host    $blob.Name
}
# Use parallel processing to process blobs concurrently
$blobs|ForEach-Object -Parallel {
         param (
             $blob)
    
        Write-Host $blob.Name 
} -ThrottleLimit 300
传递给cmdlet调用的脚本块(无论您是否使用)通过自动变量(也称为)隐式接收其(管道)输入。(换句话说:没有必要或没有必要声明参数):ForEach-Object -Parallel$_$PSItem
$blobs |
  ForEach-Object -Parallel {
    $_.Name  # $_ implicitly refers to the pipeline input object at hand
  } 
相比之下,该语句需要一个自选的迭代器变量(例如在您的示例中)。foreach $blob
foreach也是cmdlet的别名,并且语法上下文决定是引用语言语句还是cmdlet。ForEach-Object foreach请注意,该参数控制一次-ThrottleLimit允许的线程数。对于 CPU 密集型操作,指定高于可用 CPU 核心的数字是没有意义的;仅对于网络绑定、I/O 绑定或等待事件的操作,较高的数字才有意义。
对于ForEach-Object cmdlet, while$_与或不与 一起使用,在从调用者范围引用变量方面-Parallel存在重要区别:
对于-Parallel,您需要$using:范围;例如:
$foo = 'bar'
# Note the $using:foo reference.
# *Without* -Parallel, use just $foo
# -> 'bar1', 'bar2', 'bar3'
1..3 | ForEach-Object -Parallel { $using:foo + $_ }
| 归档时间: | 
 | 
| 查看次数: | 81 次 | 
| 最近记录: |