

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

# 在適用於 Rust 的 AWS SDK 中使用等待程式
<a name="waiters"></a>

 等待程式是一種用戶端抽象，用於輪詢資源，直到達到所需的狀態，或直到確定資源不會進入所需的狀態為止。這是在使用 Amazon Simple Storage Service 等最終一致的服務時常見的任務，或是非同步建立資源的服務，例如 Amazon Elastic Compute Cloud。編寫邏輯以持續輪詢資源的狀態可能會很麻煩且容易出錯。等待程式的目標是將此責任移出客戶程式碼並移入 適用於 Rust 的 AWS SDK，該程式碼對 AWS 操作的計時方面有深入的了解。

AWS 服務 為等待者提供支援的 包含 `<service>::waiters`模組。
+ `<service>::client::Waiters` 特徵提供用戶端的等待程式方法。方法會針對 `Client` 結構實作。所有等待程式方法都遵循 的標準命名慣例 `wait_until_<Condition>` 
  + 對於 Amazon S3，此特性為 [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/client/trait.Waiters.html](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/client/trait.Waiters.html)。

下列範例使用 Amazon S3。不過，對於已定義一或多個等待程式的任何 AWS 服務 ，這些概念都相同。

下列程式碼範例顯示使用等待程式函數，而不是寫入輪詢邏輯，以等待建立後儲存貯體存在。

```
use std::time::Duration;
use aws_config::BehaviorVersion;
// Import Waiters trait to get `wait_until_<Condition>` methods on Client.
use aws_sdk_s3::client::Waiters;


let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;
    
let s3 = aws_sdk_s3::Client::new(&config);

// This initiates creating an S3 bucket and potentially returns before the bucket exists.
s3.create_bucket()
    .bucket("my-bucket")
    .send()
    .await?;

// When this function returns, the bucket either exists or an error is propagated.
s3.wait_until_bucket_exists()
    .bucket("my-bucket")
    .wait(Duration::from_secs(5))
    .await?;

// The bucket now exists.
```

**注意**  
 每個等待方法都會傳回 `Result<FinalPoll<...>, WaiterError<...>> `，可用於在到達所需條件或錯誤的最終回應時取得。如需詳細資訊，請參閱 Rust API 文件中的 [FinalPoll](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/waiters/struct.FinalPoll.html) 和 [WaiterError](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/waiters/error/enum.WaiterError.html)。