

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

# 在 Amazon SWF 中設定任務優先順序
<a name="programming-priority"></a>

根據預設，任務清單上的任務根據它們的「到達時間」**來交付：先排程的任務一般盡可能先執行。透過設定選用*任務優先順序*，您可以優先處理某些任務：Amazon SWF 會嘗試在任務清單上交付優先順序較高的任務，然後再處理優先順序較低的任務。

**注意**  
先排定的任務一般會先執行，但不保證一定如此。

您可以為工作流程和活動都設定任務優先順序。工作流程的任務優先順序並不影響其排程的任何活動任務優先順序，也不影響其啟動的任何子工作流程。活動或工作流程的預設優先順序是在註冊期間設定 （由您或 Amazon SWF 設定），除非在排程活動或啟動工作流程執行時覆寫，否則一律會使用已註冊的任務優先順序。

任務優先順序值的範圍介於 "-2147483648" 到 "2147483647"，數字愈大表示優先順序愈高。如果您未設定活動或工作流程的任務優先順序，則會為其指派優先順序零 ("0")。

**Topics**
+ [

## 為工作流程設定任務優先順序
](#task-priority-workflows)
+ [

## 為活動設定任務優先順序
](#task-priority-activities)
+ [

## 傳回任務優先順序資訊的動作
](#task-priority-responses)

## 為工作流程設定任務優先順序
<a name="task-priority-workflows"></a>

當您註冊或啟動工作流程時，您可為它設定任務優先順序。除非在啟動工作流程執行時被覆寫，否則在註冊工作流程類型時設定的任務優先順序，會用為該類型任何工作流程執行的預設值。

若要以預設任務優先順序註冊工作流程類型，請在使用 [RegisterWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterWorkflowType.html) 動作時設定 *defaultTaskPriority* 選項：

```
{
  "domain": "867530901",
  "name": "expeditedOrderWorkflow",
  "version": "1.0",
  "description": "Expedited customer orders workflow",
  "defaultTaskStartToCloseTimeout": "600",
  "defaultExecutionStartToCloseTimeout": "3600",
  "defaultTaskList": {"name": "mainTaskList"},
  "defaultTaskPriority": "10",
  "defaultChildPolicy": "TERMINATE"
}
```

當您使用 [StartWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html) 啟動工作流程執行時，可以覆寫該工作流程類型已註冊的任務優先順序：

```
{
  "childPolicy": "TERMINATE",
  "domain": "867530901",
  "executionStartToCloseTimeout": "1800",
  "input": "arbitrary-string-that-is-meaningful-to-the-workflow",
  "tagList": ["music purchase", "digital", "ricoh-the-dog"],
  "taskList": {"name": "specialTaskList"},
  "taskPriority": "-20",
  "taskStartToCloseTimeout": "600",
  "workflowId": "20110927-T-1",
  "workflowType": {"name": "customerOrderWorkflow", "version": "1.0"},
}
```

啟動子工作流程或以新項目繼續執行工作流程時 (例如，以 [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html) 回應決策)，也可覆寫已註冊的任務優先順序。

若要設定子工作流程的任務優先順序，請在 `startChildWorkflowExecutionDecisionAttributes` 中提供值：

```
{
  "taskToken": "AAAAKgAAAAEAAAAAAAAAA...",
  "decisions": [
    {
      "decisionType": "StartChildWorkflowExecution",
      "startChildWorkflowExecutionDecisionAttributes": {
        "childPolicy": "TERMINATE",
        "control": "digital music",
        "executionStartToCloseTimeout": "900",
        "input": "201412-Smith-011x",
        "taskList": {"name": "specialTaskList"},
        "taskPriority": "5",
        "taskStartToCloseTimeout": "600",
        "workflowId": "verification-workflow",
        "workflowType": {
          "name": "MyChildWorkflow",
          "version": "1.0"
        }
      }
    }
  ]
}
```

以新項目繼續執行工作流程時，請在 `continueAsNewWorkflowExecutionDecisionAttributes` 中設定任務優先順序：

```
{
  "taskToken": "AAAAKgAAAAEAAAAAAAAAA...",
  "decisions": [
    {
      "decisionType": "ContinueAsNewWorkflowExecution",
      "continueAsNewWorkflowExecutionDecisionAttributes": {
        "childPolicy": "TERMINATE",
        "executionStartToCloseTimeout": "1800",
        "input": "5634-0056-4367-0923,12/12,437",
        "taskList": {"name": "specialTaskList"},
        "taskStartToCloseTimeout": "600",
        "taskPriority": "100",
        "workflowTypeVersion": "1.0"
      }
    }
  ]
}
```

## 為活動設定任務優先順序
<a name="task-priority-activities"></a>

您可在註冊或排程活動時，為它設定任務優先順序。除非在排程活動時被覆寫，否則在註冊活動類型時設定的任務優先順序，會用為活動執行的預設值。

若要在註冊活動類型時設定任務優先順序，請在使用 [RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html) 動作時設定 *defaultTaskPriority* 選項：

```
{
  "defaultTaskHeartbeatTimeout": "120",
  "defaultTaskList": {"name": "mainTaskList"},
  "defaultTaskPriority": "10",
  "defaultTaskScheduleToCloseTimeout": "900",
  "defaultTaskScheduleToStartTimeout": "300",
  "defaultTaskStartToCloseTimeout": "600",
  "description": "Verify the customer credit card",
  "domain": "867530901",
  "name": "activityVerify",
  "version": "1.0"
}
```

若要以任務優先順序排程任務，請在使用 [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html) 動作排程活動時使用 *taskPriority* 選項：

```
{
  "taskToken": "AAAAKgAAAAEAAAAAAAAAA...",
  "decisions": [
    {
      "decisionType": "ScheduleActivityTask",
      "scheduleActivityTaskDecisionAttributes": {
        "activityId": "verify-account",
        "activityType": {
            "name": "activityVerify",
            "version": "1.0"
        },
        "control": "digital music",
        "input": "abab-101",
        "taskList": {"name": "mainTaskList"},
        "taskPriority": "15"
      }
    }
  ]
}
```

## 傳回任務優先順序資訊的動作
<a name="task-priority-responses"></a>

您可以從下列 Amazon SWF 動作取得有關設定任務優先順序 （或設定預設任務優先順序） 的資訊：
+ [DescribeActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeActivityType.html) 傳回回應 `configuration`區段中活動類型的 *defaultTaskPriority*。
+ [DescribeWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeWorkflowExecution.html) 傳回回應 `executionConfiguration`區段中工作流程執行的 *taskPriority*。
+ [DescribeWorkflowType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DescribeWorkflowType.html) 傳回回應 `configuration`區段中工作流程類型的 *defaultTaskPriority*。
+ [GetWorkflowExecutionHistory](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_GetWorkflowExecutionHistory.html) 和 [PollForDecisionTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForDecisionTask.html) 會在回應的 `activityTaskScheduledEventAttributes`、`decisionTaskScheduledEventAttributes`、`workflowExecutionContinuedAsNewEventAttributes` 和 `workflowExecutionStartedEventAttributes` 區段內提供任務優先順序資訊。