将两个工作流嵌套在一个工作流中以 运行 并行

Nest two workflows in a single workflow to run parallel

我确定我不是第一个尝试此操作的人,但找不到一个 post 关于它。

我正在尝试将两个工作流嵌套在一个工作流中,以便这两个工作流并行运行,我得到 10 个进程。这是我首先尝试的:

Workflow a {
    param(
        [parameter()]alist
    )
    sequence
    {
        $WORKFLOW:aOutput = @()
        foreach ($aObject in $aList)
        {
            $WORKFLOW:aOutput += do_stuff
        }
        return $WORKFLOW:aOutput
    }
)
}
Workflow b {
    param(
        [parameter()]blist
    )
    sequence
    {
        $WORKFLOW:bOutput = @()
        foreach ($bObject in $bList)
        {
            $WORKFLOW:bOutput += do_stuff
        }
        return $WORKFLOW:bOutput
    }
)
}
Workflow nest
{
param(
    [parameter()]alist,
    [parameter()]blist
)
parallel
{
    $aOutput = b -alist alist
    $bOutput = b -blist blist
}
return ($aOutput,$bOutput)
}

这一切都很好,但只能启动 5 个并行进程而不是 10 个。所以我尝试这样做:

Workflow nest
{
param(
    [parameter()]alist,
    [parameter()]blist
)
parallel
{
    $aOutput =  inlinescript
    {
        Workflow a {
        param(
            [parameter()]alist
        )
        sequence
        {
            $WORKFLOW:aOutput = @()
            foreach ($aObject in $aList)
            {
                $WORKFLOW:aOutput += do_stuff
            }
            return $WORKFLOW:aOutput
        }
    }
    $bOutput = inlinescript
    {
        Workflow b {
                param(
                    [parameter()]blist
                )
                sequence
                {
                    $WORKFLOW:bOutput = @()
                    foreach ($bObject in $bList)
                    {
                        $WORKFLOW:bOutput += do_stuff
                    }
                    return $WORKFLOW:bOutput
                }
            )
        }
        b -blist blist
    }
}
return ($aOutput,$bOutput)
}

我在这里遇到的问题是,在内联脚本块中使用范围 WORKFLOW 会引发错误。错误提示改用作用域 USING 但是当我切换到有关重新定义 foreach -parallel 块内的变量时出现错误。

我正在寻找的是这可能吗?如果是的话,需要使用什么范围界定来嵌套工作流?或者是否有另一种方法可以让工作流程同时达到 运行,每个流程有 5 个流程?

为伪代码道歉,但实际代码包含我无法分享的信息。

我设法弄清楚了,并弄清楚了 USING 作用域的使用位置。

Workflow nest
{
param(
    [parameter()]alist,
    [parameter()]blist
)
parallel
{
    $aOutput =  inlinescript
    {
        Workflow a {
        param(
            [parameter()]alist
        )
        sequence
        {
            $aOutput = foreach ($aObject in $aList)
            {
                do_stuff
            }
            return aOutput
        }
        a -alist $USING:alist
    }
    $bOutput = inlinescript
    {
        Workflow b {
                param(
                    [parameter()]blist
                )
                sequence
                {
                    $bOutput = foreach ($bObject in $bList)
                    {
                        do_stuff
                    }
                    return $bOutput
                }
            )
        }
        b -blist $USING:blist
    }
}
return ($aOutput,$bOutput)
}

基本上我删除了添加到 foreach 循环中的数组定义,并将其设置为等于 foreach 循环。这完全消除了我对示波器的需求。我必须将嵌套工作流中传递的 a/b 列表变量设置为具有 USING 范围的内联脚本。