当我在另一个工作流的 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 时,它工作得非常好,尽管速度很慢。
谁能解释这里发生了什么或如何解决它?