

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

# 异步使用 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/async/SdkPublisher.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/async/SdkPublisher.html)，而不是同步 `DynamoDbEnhanceClient` 为相同方法返回的 [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)。然后，您的应用程序可以向该发布者订阅处理程序，以异步方式处理结果，而无需阻塞。

   ```
   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)。