

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

# AWS Flow Framework 基本概念：任務清單和任務執行
<a name="awsflow-basics-task-lists"></a>

 Amazon SWF 會透過將工作流程和活動任務發佈至具名清單來管理工作流程和活動任務。Amazon SWF 至少維護兩個任務清單，一個用於工作流程工作者，另一個用於活動工作者。

**注意**  
您可以視需要指定任意數量的任務清單，將不同的工作者指派給各清單。任務清單數目沒有任何限制。當您建立工作者物件時，您通常會在工作者主機應用程式中指定一份工作者任務清單。

下列來自 `HelloWorldWorkflow` 主機應用程式的摘錄會建立新的活動工作者，並將它指派到 `HelloWorldList` 活動任務清單。

```
public class GreeterWorker  {
    public static void main(String[] args) throws Exception {
    ...
    String domain = " helloWorldExamples";
    String taskListToPoll = "HelloWorldList";

    ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll);
    aw.addActivitiesImplementation(new GreeterActivitiesImpl());
    aw.start();
    ...
  }
}
```

根據預設，Amazon SWF 會在`HelloWorldList`清單中排程工作者的任務。接著工作者向此清單輪詢任務。您可為任務清單指派任何名稱。您甚至可以讓工作流程和活動清單使用同一個名稱。在內部，Amazon SWF 會將工作流程和活動任務清單名稱放在不同的命名空間中，因此兩個清單會有所不同。

如果您未指定任務清單， 會在工作者向 Amazon SWF 註冊類型時 AWS Flow Framework 指定預設清單。如需詳細資訊，請參閱[工作流程和活動類型註冊](features.registration.md)。

有時候，讓特定的工作者或工作者群組執行某些任務是很有幫助的。例如，影像處理工作流程可能會使用一個活動來下載影像，然後使用另一個活動來處理影像。在同一個系統中執行這兩項任務比較有效率，並可避免在網路上傳輸大型檔案的費用。

若要支援此類案例，您可以使用包含 `schedulingOptions` 參數的多載，在您呼叫活動用戶端方法時明確指定任務清單。您可以透過傳遞 方法適當設定的`ActivitySchedulingOptions`物件來指定任務清單。

例如，假設 `HelloWorldWorkflow` 應用程式的 `say` 活動由 `getName` 和 `getGreeting` 以外的活動工作者主持。下列範例示範如何確保 `say` 能和 `getName` 及 `getGreeting` 使用同一份任務清單，即使它們本來獲派不同的清單。

```
public class GreeterWorkflowImpl implements GreeterWorkflow {
  private GreeterActivitiesClient operations1 = new GreeterActivitiesClientImpl1(); //getGreeting and getName
  private GreeterActivitiesClient operations2 = new GreeterActivitiesClientImpl2(); //say
  @Override
  public void greet() {
    Promise<String> name = operations1.getName();
    Promise<String> greeting = operations1.getGreeting(name);
    runSay(greeting);
  }
  @Asynchronous
  private void runSay(Promise<String> greeting){
    String taskList = operations1.getSchedulingOptions().getTaskList();
    ActivitySchedulingOptions schedulingOptions = new ActivitySchedulingOptions();
    schedulingOptions.setTaskList(taskList);
    operations2.say(greeting, schedulingOptions);
  }
}
```

同步的 `runSay` 方法從其用戶端物件取得 `getGreeting` 任務清單。然後建立並設定 `ActivitySchedulingOptions` 物件，以確保 `say` 和 `getGreeting` 輪詢同一份任務清單。

**注意**  
當您將 `schedulingOptions` 參數傳遞到活動用戶端方法時，它只會覆寫用於該活動執行的原始任務清單。如果您再次呼叫活動用戶端方法，但未指定任務清單，Amazon SWF 會將任務指派給原始清單，活動工作者會輪詢該清單。