

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Flow Framework 基本的な概念: タスクリストとタスク実行
<a name="awsflow-basics-task-lists"></a>

 Amazon SWF は、ワークフローとアクティビティタスクを、名前付きリストに載せることで管理します。Amazon SWF は、少なくとも 2 つのタスクリストを保持します。ひとつはワークフローワーカー用、もうひとつはアクティビティワーカー用です。

**注記**  
タスクリストは、必要なだけいくつでも指定し、リストごとに異なるワーカーを割り当てることができます。タスクリスト数に制限はありません。通常、ワーカーのタスクリストは、ワーカーオブジェクトの作成時にワーカーホストアプリケーションで指定します。

次の `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 内部では、ワークフロー用とアクティビティ用のタスクリスト名が異なる名前空間に配置されるため、2 つのリストは区別されます。

タスクリストを指定しない場合、 はワーカーが Amazon SWF にタイプを登録するときにデフォルトリスト AWS Flow Framework を指定します。詳細については、「[ワークフロータイプとアクティビティタイプの登録](features.registration.md)」を参照してください。

特定のワーカーやワーカーグループで実行するタスクを分担すると便利な場合があります。たとえば、イメージ処理ワークフローでイメージのダウンロードとイメージの処理を 2 つの異なるアクティビティで分担できます。両方のタスクを同じシステムで実行するほうが効率的です。大きなファイルのネットワーク転送に伴うオーバーヘッドを回避できます。

このようなシナリオをサポートするには、アクティビティメソッドを呼び出すときに、`schedulingOptions` パラメータを含むオーバーロードを使用してタスクリストを明示的に指定できます。タスクリストを指定するには、適切に設定された`ActivitySchedulingOptions`オブジェクトをメソッドに渡します。

例えば、`HelloWorldWorkflow` アプリケーションの `say` アクティビティをホストするアクティビティワーカーが `getName` や `getGreeting` とは異なるとします。次の例は、`getName` と `getGreeting` の割り当て先の元のタスクリストが異なる場合でも、この 2 つと同じタスクリストを `say` で使用する方法を示しています。

```
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 はタスクを元のリストに割り当て、このリストに対してアクティビティワーカーはポーリングを行います。