Powershell 工作流处理

Powershell Workflow Processing

为什么这会以(几乎)降序呈现列表?

Workflow FE-Parallel {
    foreach -parallel ($i in 0..100) { $i }
}

偶尔会有乱序的数字 (0..100) 生成一个从 0 开始到 100 结束的列表。

您无法保证并行处理项目时的处理顺序。

如果您要问为什么每次的顺序都不一样,或者为什么不是按顺序从 0 升到 100,这就是原因。你可以用这样的代码更好地看到这一点:

foreach -parallel ($i in 0..100) {
    Start-Sleep -Milliseconds (Get-Random -Minimum 100 -Maximum 800)
    $i
}

如果您问它为什么下降(而不是看起来更多 "random"),那么我认为这是一个实现细节。在内部,设置每个线程(或运行空间,或使用的任何机制)的代码需要迭代每个项目。它可能以一种可预测的方式进行,并且当您的操作如此简单时,它们很可能以大致相同的顺序完成。

为什么要反过来呢?不确定,但重要的是你不能依赖任何特定的顺序。