

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

# Amazon SWF 超时类型
<a name="swf-timeout-types"></a>

为确保工作流程执行正常运行，您可以使用 Amazon SWF 设置不同类型的超时。一些超时指定工作流程的总运行时长。其它超时指定活动任务在被分配给工作程序之前所花费的时间以及从排定到完成所花费的时间。Amazon SWF API 中的所有超时都以秒为单位。Amazon SWF 还支持将字符串 `NONE` 作为超时值，表示没有超时。

对于与决策任务和活动任务相关的超时，Amazon SWF 会在工作流执行历史中添加一个事件。事件的属性提供了所发生超时类型的信息以及以及受影响的决策任务或活动任务。Amazon SWF 还会计划决策任务。当决策者收到新的决策任务时，它将在历史记录中看到超时事件，并通过调用操作来采取适当的[RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)行动。

任务被视为从排定时开始到其关闭为止都处于开启状态。因此，当工作程序处理任务时，任务被报告为开启状态。当工作程序将任务状态报告为[已完成](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCompleted.html)、[已取消](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCanceled.html)或[失败](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskFailed.html)时，任务关闭。Amazon SWF 也可能会因超时而关闭任务。

## 工作流程和决策任务中的超时
<a name="swf-timeout-types-workflow"></a>

下图显示工作流程和决策超时如何与工作流程的生命周期相关：

![\[工作流程的生命周期，具有超时。\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/developerguide/images/workflow_timeouts.png)


与工作流程和决策任务相关的超时类型有两个：
+ **工作流启动到关闭 (`timeoutType: START_TO_CLOSE`)** - 该超时指定了完成工作流执行所需的最长时间。工作流程注册期间，这一超时被设置为默认值，但当工作流程启动时，可用其它值覆盖该默认值。如果超过此超时时间，Amazon SWF 将关闭工作流程执行并在工作流程执行历史中[WorkflowExecutionTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_WorkflowExecutionTimedOutEventAttributes.html)添加类型[的事件](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)。除了 `timeoutType` 之外，事件属性还会指定对此工作流程执行有效的 `childPolicy`。子策略指定上级工作流程执行超时或终止时子工作流程执行的处理方法。例如，如果 `childPolicy` 被设置为 TERMINATE，则子工作流程执行将被终止。一旦工作流程执行超时，则不能对其执行可视性调用之外的其他任何操作。
+ **决策任务启动到关闭 (`timeoutType: START_TO_CLOSE`)** – 该超时指定了相应决策程序完成决策任务所需的最长时间。该超时在工作流程类型注册期间设置。如果超过此超时时间，则任务将在工作流程执行历史中标记为超时，Amazon SWF 会在工作流程历史记录中添加[DecisionTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DecisionTaskTimedOutEventAttributes.html)类型的事件。事件属性将包括与该决策任务 IDs 的计划时间 (`scheduledEventId`) 和启动时间 () 相对应的事件。`startedEventId`除了添加事件外，Amazon SWF 还会计划新决策任务以警告决策程序此决策任务已超时。此超时发生后，使用 `RespondDecisionTaskCompleted` 完成超时决策任务的尝试将失败。

## 活动任务中的超时
<a name="swf-timeout-types-activity"></a>

下图显示超时如何与活动任务的生命周期相关：

![\[任务的生命周期，具有超时\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/developerguide/images/activity_timeouts.png)


与活动任务相关的超时类型有四个：
+ **活动任务启动到关闭 (`timeoutType: START_TO_CLOSE`)** – 该超时指定了活动工作线在接收到任务后处理任务所需的最长时间。尝试使用[RespondActivityTaskCanceled](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCanceled.html)、[RespondActivityTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCompleted.html)和关闭超时活动任务[RespondActivityTaskFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskFailed.html)将失败。
+ **活动任务检测信号 (`timeoutType: HEARTBEAT`)** – 该超时指定了任务在通过 操作提供其进程前可以运行的最长时间。
+ **活动任务计划到开始 (`timeoutType: SCHEDULE_TO_START`)** – 该超时指定了在没有工作线执行活动任务时 Amazon SWF 在活动任务超时前等待的时间。一旦超时，过期的任务就不能分配给另一工作程序。
+ **活动任务安排到关闭 (`timeoutType: SCHEDULE_TO_CLOSE`)** – 该超时指定了任务从计划到完成所需的时间。作为最佳实践，此值不应大于任务 schedule-to-start超时和任务超时之和。 start-to-close

**注意**  
每一个超时类型都有默认值，一般设置为 `NONE` (无限)。但是任何活动执行的最长时间均被限制为一年。

您在活动类型注册期间设置这些活动的默认值，但当您[排定](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ScheduleActivityTaskDecisionAttributes.html)活动任务时您可以用新值覆盖默认值。当其中一个超时发生时，Amazon SWF 将在工作流程历史[记录中添加一个[ActivityTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskTimedOutEventAttributes.html)](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)类型的事件。此事件的 `timeoutType` 值属性将指定发生了何种超时。对于其中每一个超时，`timeoutType` 的值都显示在括号中。事件属性还将包括与活动任务的 IDs 计划时间 (`scheduledEventId`) 和启动时间 () 相对应的事件。`startedEventId`除了添加事件外，Amazon SWF 还会计划新决策任务以警告决策程序已发生超时。