

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

# 在 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)

## 设置活动的任务优先级
<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);
```