

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 處理 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 參考*》中的 動作主題。

如果失敗的請求是決策，則會在工作流程執行歷史記錄中列出適當的事件。例如，如果 `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 參考》中的[歷史記錄事件](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)。