

的版本 4 (V4) 适用于 .NET 的 Amazon SDK 已经发布！

有关重大更改和迁移应用程序的信息，请参阅[迁移主题](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)。

 [https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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

# 使用异步编程 适用于 .NET 的 Amazon SDK
<a name="sdk-net-async-api"></a>

 适用于 .NET 的 Amazon SDK 使用*基于任务的异步模式 (TAP)* 进行异步实现。要了解有关 TAP 的更多信息，请参阅 docs.microsoft.com 上的[基于任务的异步模式（TAP）](https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap)。

本主题概述了如何在呼叫 Amazon 服务客户时使用 TAP。

 适用于 .NET 的 Amazon SDK API 中的异步方法是基于`Task`类或`Task<TResult>`类的操作。[有关这些类的信息，请参阅 docs.microsoft.com：[任务类、任务< > 类](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task)。TResult](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1)

在您的代码中调用这些 API 方法时，必须在使用 `async` 关键字声明的函数中调用，如以下示例所示。

```
static async Task Main(string[] args)
{
  ...
  // Call the function that contains the asynchronous API method.
  // Could also call the asynchronous API method directly from Main
  //  because Main is declared async
  var response = await ListBucketsAsync();
  Console.WriteLine($"Number of buckets: {response.Buckets.Count}");
  ...
}

// Async method to get a list of Amazon S3 buckets.
private static async Task<ListBucketsResponse> ListBucketsAsync()
{
  ...
  var response = await s3Client.ListBucketsAsync();
  return response;
}
```

如前面的代码片段所示，`async` 声明的首选范围是 `Main` 函数。设置此 `async` 范围可确保要求对 Amazon 服务客户端的调用都是异步的。如果由于某种原因无法声明 `Main` 为异步，则可以在除 `Main` 之外的函数上使用 `async` 关键字，然后从那里调用 API 方法，如以下示例所示。

```
static void Main(string[] args)
{
  ...
  Task<ListBucketsResponse> response = ListBucketsAsync();
  Console.WriteLine($"Number of buckets: {response.Result.Buckets.Count}");
  ...
}

// Async method to get a list of Amazon S3 buckets.
private static async Task<ListBucketsResponse> ListBucketsAsync()
{
  ...
  var response = await s3Client.ListBucketsAsync();
  return response;
}
```

请注意使用此模式时 `Main` 所需的特殊 `Task<>` 语法。此外，您必须使用响应的 **`Result`** 成员来获取数据。

您可以在（[简单跨平台应用程序](quick-start-s3-1-cross.md)和[基于 Windows 的简单应用程序](quick-start-s3-1-winvs.md)）[创建简单的应用程序](quick-start.md)部分和中查看对 Amazon 服务客户端进行异步调用的完整示例[引导式代码示例高级库和框架](tutorials-examples.md)。