

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

# AWS Flow Framework 適用於 Java 的重播行為
<a name="programming-replay"></a>

本主題使用「[什麼是 AWS Flow Framework 適用於 Java 的 ？](welcome.md)」一節中的範例來討論重新執行行為範例。將會討論[同步](#programming-replay-synchronous)及[非同步](#programming-replay-asynchronous)藍本。

## 範例 1：同步重新執行
<a name="programming-replay-synchronous"></a>

如需同步工作流程中的重新執行運作方式範例，請在個別的 [HelloWorldWorkflow](getting-started-example-helloworldworkflow.md) 工作流程和活動實作內新增 `println` 呼叫，以對這些實作進行修改，如下所示：

```
public class GreeterWorkflowImpl implements GreeterWorkflow {
...
   public void greet() {
      System.out.println("greet executes");
      Promise<String> name = operations.getName();
      System.out.println("client.getName returns");
      Promise<String> greeting = operations.getGreeting(name);
      System.out.println("client.greeting returns");
      operations.say(greeting);
      System.out.println("client.say returns");
   }
}
**************
public class GreeterActivitiesImpl implements GreeterActivities {
   public String getName() {
      System.out.println("activity.getName completes");
      return "World";
   }

   public String getGreeting(String name) {
      System.out.println("activity.getGreeting completes");
      return "Hello " + name + "!";
   }

   public void say(String what) {
      System.out.println(what);
   }
}
```

如需程式碼的詳細資訊，請參閱「[HelloWorldWorkflow 應用程式](getting-started-example-helloworldworkflow.md)」。以下編輯過的輸出版本包含註解，指出每個重新執行部分的開始。

```
//Episode 1
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getGreeting completes
//Episode 3
greet executes
client.getName returns
client.greeting returns
client.say returns

Hello World! //say completes
//Episode 4
greet executes
client.getName returns
client.greeting returns
client.say returns
```

此範例的重新執行程序運作方式如下：
+ 第一個部分排程無相依性的 `getName` 活動任務。
+ 第二個部分排程相依於 `getName` 的 `getGreeting` 活動任務。
+ 第三個部分排程相依於 `getGreeting` 的 `say` 活動任務。
+ 最後一個部分未排程任何額外任務，且找不到未完成的活動，其可終止工作流程執行。

**注意**  
三種活動用戶端方法在每個部分各呼叫一次。不過，其中只有一個呼叫會導致活動任務，因此一個任務只會執行一次。

## 範例 2：非同步重新執行
<a name="programming-replay-asynchronous"></a>

與[同步重新執行範例](#programming-replay-synchronous)類似，您可以修改 [HelloWorldWorkflowAsync 應用程式](getting-started-example-helloworldworkflowasync.md)以查看非同步重新執行運作方式。產生的輸出如下：

```
//Episode 1
greet executes
client.name returns
workflow.getGreeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes

Hello World! //say completes
//Episode 3
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes
```

因為只有兩個活動，所以 HelloWorldAsync 使用三個重新執行部分。`getGreeting` 活動已取代為 *getGreeting* 非同步工作流程方法，後者不會在完成時開始重新執行部分。

第一個部分不會呼叫 `getGreeting`，因為它相依於 *name* 活動完成。不過，在 *getName* 完成之後，重新執行會針對每個後續部分呼叫 *getGreeting* 一次。

## 另請參閱
<a name="see-also"></a>
+ [AWS Flow Framework 基本概念：分散式執行](awsflow-basics-distributed-execution.md)