

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

# 非同步使用 DynamoDB 增強型用戶端 API
<a name="ddb-en-client-async"></a>

如果您的應用程式需要非封鎖、非同步呼叫 DynamoDB，您可以使用 [DynamoDbEnhancedAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.html)。它類似於同步實作，但有下列主要差異：

1. 建置 時`DynamoDbEnhancedAsyncClient`，您必須提供標準用戶端的非同步版本 `DynamoDbAsyncClient`，如下列程式碼片段所示。

   ```
    DynamoDbEnhancedAsyncClient enhancedClient = 
        DynamoDbEnhancedAsyncClient.builder()
                                   .dynamoDbClient(dynamoDbAsyncClient)
                                   .build();
   ```

1. 傳回單一資料物件的方法會傳回結果`CompletableFuture`的 ，而非僅傳回結果。然後，您的應用程式可以執行其他工作，而不必封鎖結果。下列程式碼片段顯示非同步`getItem()`方法。

   ```
   CompletableFuture<Customer> result = customerDynamoDbTable.getItem(customer);
   // Perform other work here.
   return result.join();   // Now block and wait for the result.
   ```

1. 傳回結果分頁清單的方法會傳回[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/pagination/sync/SdkIterable.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/pagination/sync/SdkIterable.html)同步針對相同方法`DynamoDbEnhanceClient`傳回的 ，[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/async/SdkPublisher.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/async/SdkPublisher.html)而不是 。然後，您的應用程式可以訂閱該發佈者的處理常式，以非同步方式處理結果，而無需封鎖。

   ```
   PagePublisher<Customer> results = customerDynamoDbTable.query(r -> r.queryConditional(keyEqualTo(k -> k.partitionValue("Smith"))));
   results.subscribe(myCustomerResultsProcessor);
   // Perform other work and let the processor handle the results asynchronously.
   ```

   如需使用 的更完整範例`SdkPublisher API`，請參閱討論本指南非同步`scan()`方法一節中[的範例](ddb-en-client-use-multirecord.md#ddb-en-client-use-multirecord-scan-async)。