

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

# 处理 Amazon SWF 中的错误
<a name="swf-dg-error-handling"></a>

工作流执行过程中会发生很多不同类型的错误。

**Topics**
+ [验证错误](#validation-errors)
+ [制定操作或决策中发生的错误](#errors-in-enacting-actions-or-decisions)
+ [超时](#timeouts)
+ [用户代码导致的错误](#errors-raised-by-user-code)
+ [与关闭工作流执行相关的错误。](#errors-related-to-closing-a-workflow-execution)

## 验证错误
<a name="validation-errors"></a>

当发送至 Amazon SWF 的请求因格式不正确或包含无效数据而失败时，就会发生验证错误。在此背景下，请求可以是 `DescribeDomain` 之类的操作或 `StartTimer` 之类的决策。如果该请求是一个操作，则 Amazon SWF 会在响应中返回错误代码。检查此错误代码，因为它可能会提供有关请求的哪方面导致失败的信息。例如，请求传输的一个或多个参数可能无效。有关常见错误代码的列表，请参阅《Amazon Simple Workflow Service API Reference》**中的操作主题。

如果失败的请求是一个决策，则将会在工作流执行历史中列出适当的事件。例如，如果 `StartTimer` 决策失败，您会在历史中看到 `StartTimerFailed` 事件。决策程序应在其接收历史时检查上述事件以响应 `PollForDecisionTask` 或 `GetWorkflowExecutionHistory`。下面是在决策格式不正确或包含无效数据时可能发生的决策失败事件的列表。

## 制定操作或决策中发生的错误
<a name="errors-in-enacting-actions-or-decisions"></a>

即使请求的格式正确，也可能会在 Amazon SWF 尝试执行请求时发生错误。在这种情况下，历史中的以下事件中会有一个指示错误已发生。查看事件的 `reason` 字段以确定失败原因。
+ `[CancelTimerFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_CancelTimerFailedEventAttributes.html)`
+ `[RequestCancelActivityTaskFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RequestCancelActivityTaskFailedEventAttributes.html)`
+ `[RequestCancelExternalWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RequestCancelExternalWorkflowExecutionFailedEventAttributes.html)`
+ `[ScheduleActivityTaskFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ScheduleActivityTaskFailedEventAttributes.html)`
+ `[SignalExternalWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_SignalExternalWorkflowExecutionFailedEventAttributes.html)`
+ `[StartChildWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartChildWorkflowExecutionFailedEventAttributes.html)`
+ `[StartTimerFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartTimerFailedEventAttributes.html)`

## 超时
<a name="timeouts"></a>

[决策程序](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterWorkflowType.html)、[活动工作线程](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html)和[工作流执行](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html)都会在超时时间限制内运行。在这种类型的错误中，任务或子工作流超时。描述超时的事件会出现在历史记录中。决策程序应通过重新排定任务或重新启动子工作流等方法处理此事件。有关超时的更多信息，请参阅 [Amazon SWF 超时类型](swf-timeout-types.md)
+ `[ActivityTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskTimedOutEventAttributes.html)`
+ `[ChildWorkflowExecutionTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ChildWorkflowExecutionTimedOutEventAttributes.html)`
+ `[DecisionTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DecisionTaskTimedOutEventAttributes.html)`
+ `[WorkflowExecutionTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_WorkflowExecutionTimedOutEventAttributes.html)`

## 用户代码导致的错误
<a name="errors-raised-by-user-code"></a>

这种错误条件类型的示例为活动任务失败和子工作流失败。与超时错误一样，Amazon SWF 会将相应事件添加到工作流执行历史中。决策程序应合理地重新排定任务或重新启动子工作流以处理此事件。
+ `[ActivityTaskFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskFailedEventAttributes.html)`
+ `[ChildWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ChildWorkflowExecutionFailedEventAttributes.html)`

## 与关闭工作流执行相关的错误。
<a name="errors-related-to-closing-a-workflow-execution"></a>

如果决策程序尝试关闭具有待办决策任务的工作流，它们还可以查看以下事件。
+ `[FailWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_FailWorkflowExecutionFailedEventAttributes.html)`
+ `[CompleteWorkFlowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_CompleteWorkflowExecutionFailedEventAttributes.html)`
+ `[ContinueAsNewWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ContinueAsNewWorkflowExecutionFailedEventAttributes.html)`
+ `[CancelWorkflowExecutionFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_CancelWorkflowExecutionFailedEventAttributes.html)`

有关上述任何事件的更多信息，请参阅《Amazon SWF API Reference》中的 [History Event](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)。