.net Foreach在工作流并行中反向工作

.net Foreach在工作流并行中反向工作,.net,powershell,.net,Powershell,输出: workflow test($a) { foreach –parallel ($item in $a){ Write-Output $item } } test ("1", "2", "3", "4") 为什么foreach从末尾开始提取项目???这是因为您在foreach中使用了-Parallel 4 3 2 1 工作流测试字符串($a){ foreach($a中的

输出:

workflow test($a) {
    foreach –parallel ($item in $a){
        Write-Output $item 
   }
 }

 test ("1", "2", "3", "4")

为什么foreach从末尾开始提取项目???

这是因为您在foreach中使用了-Parallel

4
3
2
1
工作流测试字符串($a){
foreach($a中的项目){
写入输出$item
}
}
测试字符串(“1”、“2”、“3”、“4”)
#结果
。。。根据帮助文件,工作流具有并行实现:

并行执行

Windows PowerShell工作流的一个优点是能够 并行执行一组命令,而不是按顺序执行 典型的剧本。这在Runbook中特别有用,因为它们 可能会执行多个需要很长时间才能完成的操作。 例如,runbook可能提供一组虚拟机。 而不是一个一个地依次执行每个资源调配过程 另一方面,可以同时执行这些操作 总体效率。只有当一切都完成后,运行手册才能运行 继续

您可以使用Parallel关键字创建脚本块 将同时运行的多个命令。这使用了语法 如下所示。在这种情况下,Activity1和Activity2将在 同时。活动3仅在活动1和之后启动 活动2已完成

因此,以你的例子:

workflow testStrings($a) {
    foreach ($item in $a){
        Write-Output $item 
   }
 }

testStrings ("1", "2", "3", "4")
# Results
<#
1
2
3
4
#>
工作流测试字符串($a){
平行的
{
foreach($a中的项目){
写入输出$item
}
}
}
测试字符串(“1”、“2”、“3”、“4”)
#结果
工作流测试($a){
平行的
{
foreach($a中的项目){
写入输出$item
}
}
}
测试(1,2,3,4)
#结果
或者这个片段

Sequence关键字用于在一个命令行中按顺序运行命令 并行脚本块。序列脚本块与并行运行 其他命令,但块内的命令按顺序运行。 这使用如下所示的语法

在本例中,Activity1、Activity2和Activity3将在 同时

只有在Activity3完成后,Activity4才会启动。活动5 将在所有其他活动完成后开始

并行
{
序列
{
}
}

在第二个ur代码(共3个)中,它将仅是一个活动,对吗?请查看文档,它是关于序列的特定内容。我只是抛出了你的代码示例,以保持与发布文档中显示的相同代码的一致性。我现在将改变这一点,以消除其他人对本问答的困惑
workflow testStrings($a) {
    Parallel
    {
        foreach ($item in $a){
            Write-Output $item 
        }
    }
}
testStrings ("1", "2", "3", "4")
# Results
<#
1
2
3
4
#>

workflow testInt($a) {
    Parallel
    {
        foreach ($item in $a){
            Write-Output $item 
        }
    }
}
testInt (1, 2, 3, 4)
# Results
<#
1
2
3
4
#>
Parallel
{
  <Activity1>
  <Activity2>

  Sequence
  {
   <Activity3>
   <Activity4>
  }
}
<Activity5>