并行(Parallel)

本文介绍了并行状态及其相关使用示例。

基本概念

并行状态用来并行执行多个状态。它定义了多个分支(Branches),每个分支包含一系列状态。

执行并行状态会并发执行所有分支包含的状态。当所有分支执行结束后,默认将输出一个包含所有分支结果的map[string]any,然后可以通过输出构造器将结果进行进一步处理。

说明

并行状态最大分支数限制为50。

并行状态包含以下属性。

字段

类型

是否必选

描述

示例值

Name

string

状态名称。

my-state-name

Description

string

状态描述。

describe it here

Type

string

状态类型。

Parallel

InputConstructor

map[string]any

输入构造器。

请参见输入和输出

Branches

ParallelBranch

并行分支。

详见ParallelBranch

OutputConstructor

map[string]any

输出构造器。

请参见状态输出构造器

Next

string

当前状态的下一状态。当End取值为true时,无需指定。

my-next-state

End

bool

是否为当前作用域的终结节点。

true

Retry

Retry

重试配置

请参见 错误处理

Catch

Catch

捕获配置

请参见 错误处理

ParallelBranch

字段

类型

是否必选

描述

示例值

States

array

内部嵌套的状态数组。

使用示例

StartAt

string

内部嵌套状态数组的执行起点。

my start task

使用示例

下面的示例流程定义了一个并行步骤,这个并行步骤包含两个分支,每个分支又包含了一个传递步骤。

Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Parallel1
States:
  - Type: Parallel
    Name: Parallel1
    End: true
    Branches:
      - StartAt: Pass1
        States:
          - Type: Pass
            Name: Pass1
            End: true
            OutputConstructor:
              FieldA: 123
      - StartAt: Pass2
        States:
          - Type: Pass
            InputConstructor:
              FieldA: 321
            Name: Pass2
            End: true
  • Pass1的输出如下。

    {
        "FieldA": 123
    }
  • Pass2的输出如下。

    {
        "FieldA": 321
    }
  • Parallel1的输出如下,每个Branch会提供默认的名称,按照"Branch<Index>"的格式组织结果。

    {
        "Branch0": {
            "FieldA": 123
        },
        "Branch1": {
            "FieldA": 321
        }
    }