1

当我在另一个工作流的 foreach -parallel 中调用一个工作流时,我会得到奇怪且不一致的结果。这是一些示例代码:

workflow test-workflow1 {
    Start-Sleep 2
    "Stuff"
}

workflow test-workflow2 {
    foreach -parallel ($thing in @(1, 2, 4, 4)) {
        $rezult = test-workflow1
        InlineScript {
            write-host $($USING:rezult)
        }
    }
}

test-workflow2

将会发生的是,它将Stuff以不同的间隔打印出来,中间有空白行。有时它甚至根本不会打印Stuff。这里有些例子:

Stuff
Stuff Stuff Stuff

其他:

Stuff


Stuff
Stuff Stuff

我可以猜测线程正在发生一些事情,并且作为一个长期运行的工作流程,它在某种程度上是异步的并将一些 PSDataCollection 返回到 $rezult,但我不明白为什么它不是同步的。还有其他一些奇怪的事情,比如如果我返回一个对象,我会得到一个数组,其中所有元素都被塞进一个元素中,然后是一堆空元素。我以上面的例子为例,但实际上,当我使用 Invoke-RestMethod 时,这对我打击最大,因为有时它返回得很快,一切都很好,但有时它很慢并产生这种奇怪的行为。此外,当 foreach 上的 -throttlelimit 设置为 1 时,它工作得非常好,尽管速度很慢。

谁能解释这里发生了什么或如何解决它?

4

0 回答 0