

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

# 亚马逊 SWF 中的任务列表
<a name="swf-dev-task-lists"></a>

任务列表提供与工作流程相关的各种任务的组织方法。可以认为任务列表与动态队列相似。在 Amazon SWF 中安排任务时，您可以指定容纳任务的队列（任务列表）。同样，当您轮询 Amazon SWF 以获取任务时，您可以指定从哪个队列（任务列表）获取任务。

任务列表提供了灵活的机制，以在您的使用案例需要时将任务路由至工作程序。任务列表是动态的，在列表中，您不需要注册任务列表或通过一个操作明确创建列表：如果列表不存在，只需要排定任务就可创建任务列表。

*活动*任务和*决策*任务的列表是分开的。始终只在一个任务列表上排定任务；不能跨过列表共享任务。此外，与活动和工作流程一样，任务列表的范围仅限于特定 AWS 区域和 Amazon SWF 域。

**Topics**
+ [决策任务列表](#decision-task-lists)
+ [活动任务列表](#activity-task-lists)
+ [任务路由](#task-routing)

## 决策任务列表
<a name="decision-task-lists"></a>

每个工作流程执行都与一个特定的决策任务列表相关。注册工作流程类型（[RegisterWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterWorkflowType.html)操作）后，您可以为该工作流程类型的执行指定默认任务列表。当工作流程启动程序启动工作流程执行时（`StartWorkflowExecution` 操作），它可以选择为该工作流程执行指定不同的任务列表。

当决策程序轮询新决策任务（`PollForDecisionTask` 操作）时，决策程序可以指定决策任务列表以从中获取任务。一个决策程序可以通过多次调用 `PollForDecisionTask`、在每一个调用中使用不同的任务列表，以服务多个工作流程执行，在调用中，每个任务列表都指定了一个特定的工作流程执行。或者，决策程序可以轮询为多个工作流程执行提供决策任务的一个决策任务列表。您还可以使多个决策程序一起轮询一个工作流程执行的任务列表，从而使它们全部服务该工作流程执行。

## 活动任务列表
<a name="activity-task-lists"></a>

一个活动任务列表中可包含不同活动类型的任务。任务按顺序排列在任务列表中。Amazon SWF 会尽最大努力按顺序返回列表中的任务。某些情况下，任务可能不会按序出现在列表中。

注册活动类型（[RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html)操作）后，您可以为该活动类型指定默认任务列表。默认情况下，此类活动任务将在指定的任务列表中进行安排；但是，当决策者计划活动任务（[ScheduleActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ScheduleActivityTaskDecisionAttributes.html)决策）时，决策者可以选择指定不同的任务列表来安排任务。如果决策程序没有指定任务列表，则使用默认任务列表。因此，您可以根据任务属性将活动任务置放在特定任务列表中。例如，您可以将给定信用卡类型的活动任务的所有实例置放到特定任务列表中。

## 任务路由
<a name="task-routing"></a>

当活动工作人员轮询新任务（[PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html)操作）时，它可以指定要从中提取的活动任务列表。如果指定了列表，活动工作程序将只能从该列表中接受任务。用此方法，您可以确保特定任务只会分配给特定的活动工作程序。例如，您可以创建任务列表以保存需要使用高性能计算机的任务。只有运行适当硬件的活动工作程序才能轮询该任务列表。另一个示例是，为某个特定地理区域创建一个任务列表。然后，您可以确保只有在该地区部署的工作程序才能接收这些任务。或者，您可以为高优先级订单创建一个任务列表，并始终优先检查该列表。

用此方法将特定任务分配给特定活动工作程序的操作被称为*任务路由*。任务路由是可选操作；如果没有在安排活动任务时指定任务列表，则任务自动置于默认任务列表中。