

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

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

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

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

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

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

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

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

若要以預設任務優先順序註冊工作流程類型，請在宣告時在 [WorkflowRegistrationOptions](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/annotations/WorkflowRegistrationOptions.html) 中設定 *defaultTaskPriority* 選項：

```
@Workflow
@WorkflowRegistrationOptions(
    defaultTaskPriority = 10,
    defaultTaskStartToCloseTimeoutSeconds = 240)
public interface PriorityWorkflow
{
    @Execute(version = "1.0")
    void startWorkflow(int a);
}
```

您也可以在啟動工作流程時，為工作流程設定 *taskPriority*，來覆寫已註冊的 (預設) 任務優先順序。

```
StartWorkflowOptions priorityWorkflowOptions
    = new StartWorkflowOptions().withTaskPriority(10);

PriorityWorkflowClientExternalFactory cf
    = new PriorityWorkflowClientExternalFactoryImpl(swfService, domain);

priority_workflow_client = cf.getClient();

priority_workflow_client.startWorkflow(
        "Smith, John", priorityWorkflowOptions);
```

或者，您可在啟動子工作流程或將工作流程繼續做為新的工作流程使用時，設定任務優先順序。例如，您可以在 [ContinueAsNewWorkflowExecutionParameters](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/generic/ContinueAsNewWorkflowExecutionParameters.html) 或 [StartChildWorkflowExecutionParameters](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/generic/StartChildWorkflowExecutionParameters.html) 中設定 *taskPriority* 選項。

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

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

若要使用預設任務優先順序註冊活動類型，請在宣告活動時，在 [ActivityRegistrationOptions](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/annotations/ActivityRegistrationOptions.html) 中設定 *defaultTaskPriority* 選項：

```
@Activities(version = "1.0")
@ActivityRegistrationOptions(
    defaultTaskPriority = 10,
    defaultTaskStartToCloseTimeoutSeconds = 120)
public interface ImportantActivities {
    int doSomethingImportant();
}
```

您也可以在排程活動時，為活動設定 *taskPriority*，來覆寫已註冊的 (預設) 任務優先順序。

```
ActivitySchedulingOptions activityOptions = new ActivitySchedulingOptions.withTaskPriority(10);

ImportantActivitiesClient activityClient = new ImportantActivitiesClientImpl();

activityClient.doSomethingImportant(activityOptions);
```