1

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

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

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

4

1 回答 1

1

当您并行处理这些项目时,您无法保证它们将被处理的顺序。

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

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

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

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

于 2015-08-18T04:00:20.530 回答