

A versão 4 (V4) do AWS SDK para .NET foi lançada\!

Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o tópico [ de ](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html) migração.

 [![Orange button with text "Click here for details".](https://docs.aws.amazon.com/pt_br/sdk-for-net/v4/developer-guide/images/BannerButton_less-round.png)](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Programação assíncrona usando o AWS SDK para .NET
<a name="sdk-net-async-api"></a>

O AWS SDK para .NET usa o Padrão * Task-based Assíncrono (TAP) * para sua implementação assíncrona. Para saber mais sobre o TAP, consulte Padrão [ Task-based assíncrono (TAP) ](https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap) em docs.microsoft.com.

Este tópico fornece uma visão geral de como usar o TAP em suas chamadas para AWS atender clientes.

Os métodos assíncronos na AWS SDK para .NET API são operações baseadas na `Task` classe ou na classe. `Task<TResult>` Consulte docs.microsoft.com para obter informações sobre essas classes: [classe Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task), [classe Task<TResult>](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1).

Quando esses métodos de API são chamados em seu código, eles devem ser chamados em uma função declarada com a palavra-chave `async`, conforme mostrado no exemplo a seguir.

```
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;
}
```

Conforme mostrado no trecho de código anterior, o escopo preferencial para a declaração `async` é a função `Main`. Definir esse escopo `async` garante que todas as chamadas para clientes de serviço da AWS sejam obrigatoriamente assíncronas. Se não puder declarar que `Main` seja assíncrono por algum motivo, você poderá usar a palavra-chave `async` em outras funções de `Main` e, em seguida, chamar os métodos da API a partir daí, conforme mostrado no exemplo a seguir. 

```
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;
}
```

Observe a sintaxe especial `Task<>` que é necessária em `Main` quando você usa esse padrão. Além disso, você deve usar o membro **`Result`** da resposta para obter os dados.

**Atenção**  
O bloqueio de uma chamada assíncrona com`Result`, `Wait()` ou `GetAwaiter().GetResult()` é um padrão de sincronização sobre assíncrona. * * É aceitável somente em um console simples `Main` que não tenha`SynchronizationContext`. EmASP.NET,, Windows FormsWPF, eBlazor WebAssembly, esse padrão pode acabar com o pool de threads ou o impasse. Qualquer um dos resultados faz com que seu aplicativo seja suspenso. Prefira declarar `Main` como `async` e usar`await`, conforme mostrado no primeiro exemplo. Para obter detalhes, consulte [Use async/await corretamente](net-dg-performance.md#net-dg-performance-async).

Você pode ver exemplos completos de chamadas assíncronas para AWS atender clientes na [Criando um aplicativo simples](quick-start.md) seção ([Aplicativo simples para várias plataformas](quick-start-s3-1-cross.md)e[Aplicativo simples baseado no Windows](quick-start-s3-1-winvs.md)) e em. [Exemplos de código guiado](tutorials-examples.md)