

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 亚马逊 SWF 中的任务
任务

Amazon SWF 通过为活动工作线程和决策程序提供工作（称为“任务”）来与它们交互。Amazon SWF 中有三种类型的任务：
+ **活动任务** – *活动*任务指示活动工作线程执行其功能，如检查库存或信用卡计费。活动任务中包含活动工作程序执行其功能需要的所有信息。
+ **Lambda 任务** – *Lambda* 任务与活动任务类似，但它执行 Lambda 函数而不是传统的 Amazon SWF 活动。有关如何定义 Lambda 任务的更多信息，请参阅 [Amazon Lambda 亚马逊 SWF 中的任务](lambda-task.md)。
+ **决策任务** – *决策*任务向决策程序告知工作流执行状态已更改，以便决策程序确定下一个需要执行的活动。决策任务包含当前工作流程历史。

Amazon SWF 会在工作流启动时以及工作流状态发生变化时（如活动任务完成时）调度决策任务。每个决策任务中都包含整个工作流程执行历史标有页码的视图。决策程序会分析工作流执行历史，并向 Amazon SWF 回应一组决策，这些决策指定了工作流执行中接下来应完成的操作。实质上，每个决策任务都为决策程序提供了评估工作流以及向 Amazon SWF 提供指示的机会。

为确保处理的决策没有冲突，Amazon SWF 会将每个决策任务分配给一个决策程序，且一次只允许一个决策任务在工作流执行中处于活动状态。

下表显示的是与工作流程相关的不同构建与决策程序之间的关系。


| 逻辑设计 | 注册为 | 执行人 | 接收和执行 | 生成 | 
| --- | --- | --- | --- | --- | 
|  工作流  |  工作流类型  |  决策程序  |  决策任务  |  决策  | 

活动工作线程完成活动任务后，会向 Amazon SWF 报告该任务已经完成，并包括生成的任何相关结果。Amazon SWF 会使用一个表示任务已完成的事件来更新工作流执行历史记录，然后调度一个决策任务，以将更新的历史记录传输给决策程序。

Amazon SWF 会将每个活动任务分配给一个活动工作线程。一旦任务分配后，其他活动工作程序就不能认领或执行该任务。

下图所示为与活动相关的不同构建之间的关系。


|  逻辑设计  |  注册为  |  执行人  |  接收和执行  |  生成  | 
| --- | --- | --- | --- | --- | 
|  活动  |  活动类型  |  活动工作程序  |  个活动任务  |  结果数据  | 