工作流在foreach并行中的长时间工作流调用上返回不可预测的结果

时间:2018-07-17 19:20:44

标签: powershell powershell-workflow

当我在另一个工作流程的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时,即使运行缓慢,也可以正常运行。

任何人都可以解释这里发生了什么或如何解决吗?

0 个答案:

没有答案