

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

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

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](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á.

# Novas tentativas e tempos limite
<a name="retries-timeouts"></a>

O AWS SDK para .NET permite que você configure o número de novas tentativas e os valores de tempo limite para solicitações HTTP aos AWS serviços. Se os valores padrão para novas tentativas e tempos limite não forem apropriados, ajuste-os conforme os seus requisitos específicos, mas é importante entender como essa ação afetará o comportamento do aplicativo.

Para determinar quais valores usar para tentativas e tempos limite, considere o seguinte:
+ Como o aplicativo AWS SDK para .NET e seu aplicativo devem responder quando a conectividade de rede se degrada ou um AWS serviço está inacessível? Deseja que a chamada falhe rapidamente, ou é apropriado que a chamada continue tentando em seu nome?
+ O seu aplicativo é um aplicativo ou site voltado para o usuário e que deve ser responsivo, ou ele é um trabalho de processamento em segundo plano com maior tolerância a latências?
+ O aplicativo é implantado em uma rede confiável com baixa latência ou é implantado em um local remoto com conectividade incerta?

## Novas tentativas
<a name="retries"></a>

### Visão geral do
<a name="w2aac11c23c11b5"></a>

Eles AWS SDK para .NET podem repetir solicitações que falham devido à limitação do servidor ou à queda de conexões. Há duas propriedades das classes de configuração de serviço que você pode usar para especificar o comportamento de novas tentativas de um cliente de serviço. As classes de configuração de serviço herdam essas propriedades do abstrato [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)classe da [referência da AWS SDK para .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/):
+ `RetryMode`[especifica um dos três modos de repetição, definidos no Amazon.Runtime. RequestRetryMode](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TRequestRetryMode.html)enumeração.

  O valor padrão do seu aplicativo pode ser controlado usando a variável de `AWS_RETRY_MODE` ambiente ou a configuração *retry\$1mode* no arquivo de configuração compartilhado AWS .
+ `MaxErrorRetry` especifica o número de novas tentativas permitidas no nível do cliente de serviço; o SDK executa novas tentativas da operação pelo número especificado de vezes antes de causar uma falha e gerar uma exceção.

  O valor padrão do seu aplicativo pode ser controlado usando a variável de `AWS_MAX_ATTEMPTS` ambiente ou a configuração *max\$1attempts* no arquivo de AWS configuração compartilhado.

As descrições detalhadas dessas propriedades podem ser encontradas no resumo [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)classe da [Referência da AWS SDK para .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/). Cada valor de `RetryMode` corresponde, por padrão, a um valor específico de `MaxErrorRetry`, conforme mostrado na tabela a seguir.

|  |  |  | 
| --- |--- |--- |
| Legada | 10 | 4 | 
| Standard | 10 | 2 | 
| Adaptativo (experimental) | 10 | 2 | 

### Comportamento
<a name="w2aac11c23c11b9"></a>

**Quando seu aplicativo é iniciado**

Quando seu aplicativo é iniciado, os valores padrão para `RetryMode` e `MaxErrorRetry` são configurados pelo SDK. Esses valores padrão são usados quando você cria um cliente de serviço, a menos que você especifique outros valores.
+ Se as propriedades não estiverem definidas em seu ambiente, o padrão para `RetryMode` será configurado como *Legacy* e o padrão para `MaxErrorRetry` será configurado com o valor correspondente da tabela anterior.
+ Se o modo de novas tentativas tiver sido definido em seu ambiente, esse valor será usado como padrão para `RetryMode`. O padrão para `MaxErrorRetry` é configurado com o valor correspondente da tabela anterior, a menos que o valor para o máximo de erros também tenha sido definido em seu ambiente (descrito a seguir).
+ Se o valor para o máximo de erros tiver sido definido em seu ambiente, esse valor será usado como padrão para `MaxErrorRetry`. O Amazon DynamoDB é a exceção a essa regra; o valor padrão do DynamoDB para `MaxErrorRetry` é sempre o valor da tabela anterior.

**À medida que seu aplicativo é executado**

Ao criar um cliente de serviço, você pode usar os valores padrão para `RetryMode` e `MaxErrorRetry`, conforme descrito anteriormente, ou pode especificar outros valores. Para especificar outros valores, crie e inclua um objeto de configuração de serviço, como [AmazonDynamoDBConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/DynamoDBv2/TDynamoDBConfig.html)ou [Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSConfig.html), SQSConfig ao criar o cliente de serviço.

Não é possível alterar os valores de um cliente de serviço depois que ele tiver sido criado.

**Considerações**

Quando ocorre uma nova tentativa, a latência da solicitação é aumentada. Configure as tentativas com base nos limites de latência total da solicitação e taxas de erros do aplicativo.

## Tempos limite
<a name="timeouts"></a>

 AWS SDK para .NET Isso permite que você configure os tempos limite de solicitação no nível do cliente de serviço e por chamada de método. Há dois mecanismos para configurar tempos limite, que serão abordados nas seções subsequentes:
+ Se você estiver usando [chamadas assíncronas](#timeouts-async), poderá utilizar o parâmetro `CancellationToken` do método.
+ Se você estiver usando [chamadas síncronas no.NET Framework](#timeouts-sync-framework), poderá usar as `ReadWriteTimeout` propriedades `Timeout` e do abstrato [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)classe.

### Usar o parâmetro `CancellationToken` para tempos limite
<a name="timeouts-async"></a>

O AWS SDK para .NET permite que você configure tempos limite de solicitação em chamadas assíncronas usando o parâmetro. `CancellationToken` O trecho de código a seguir mostra um exemplo. O código lançará `System.Threading.Tasks.TaskCanceledException` se a solicitação não for concluída em 10 segundos.

```
string bucketName = "amzn-s3-demo-bucket";
string path = "pathToBucket";
using (var amazonS3Client = new AmazonS3Client(new AmazonS3Config()))
{
    // Cancel request after 10 seconds
    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(10000));
    CancellationToken cancellationToken = cancellationTokenSource.Token;
    ListObjectsV2Request listRequestV2 = new()
    {
        BucketName = bucketName,
        Prefix = path,
    };

    ListObjectsV2Response listResponseV2 = await amazonS3Client.ListObjectsV2Async(listRequestV2, cancellationToken);
}
```

### Usar as propriedades `Timeout` e `ReadWriteTimeout`para tempos limite
<a name="timeouts-sync-framework"></a>

**nota**  
A propriedade `Timeout` não afeta as chamadas assíncronas. Se você estiver usando chamadas assíncronas, consulte [Usar o parâmetro `CancellationToken` para tempos limite](#timeouts-async) em vez disso.

O AWS SDK para .NET permite que você configure os valores de tempo limite da solicitação e do tempo read/write limite do soquete no nível do cliente de serviço. Esses valores são especificados nas `Timeout` `ReadWriteTimeout` propriedades abstratas do [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)classe. Esses valores são transmitidos como `ReadWriteTimeout` propriedades `Timeout` e dos [HttpWebRequest](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest)objetos criados pelo objeto cliente do AWS serviço. Por padrão, o valor `Timeout` é 100 segundos e o valor `ReadWriteTimeout` é 300 segundos.

Quando a sua rede estiver com latência alta, ou existirem condições que gerem uma nova tentativa para uma operação, utilizar valores de tempo limite longos e um alto número de tentativas pode fazer com que algumas operações do SDK pareçam indiferentes.

**nota**  
A versão do AWS SDK para .NET que tem como alvo a biblioteca de classes portátil (PCL) usa a [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)classe em vez da `HttpWebRequest` classe e oferece suporte somente à propriedade [Timeout](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout).

Veja a seguir as exceções aos valores de tempo limite padrão. Estes valores são substituídos ao definir explicitamente os valores de tempo limite.
+ `Timeout`e `ReadWriteTimeout` são definidos com os valores máximos se o método que está sendo chamado fizer upload de um stream, como [AmazonS3Client. PutObjectAsync(), cliente](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3PutObjectAsyncPutObjectRequestCancellationToken.html) [Amazon S3. UploadPartAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3UploadPartAsyncUploadPartRequestCancellationToken.html), [AmazonGlacierClient. UploadArchiveAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/MGlacierUploadArchiveAsyncUploadArchiveRequestCancellationToken.html) e assim por diante.
+ As versões do AWS SDK para .NET conjunto do.NET Framework têm como alvo os valores máximos `ReadWriteTimeout` para todos os objetos `Timeout` e clientes do [AmazonS3](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html). [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html)
+ As versões do AWS SDK para .NET que têm como alvo a biblioteca de classes portátil (PCL) e o.NET Core são definidas como o valor máximo `Timeout` para todos os objetos e clientes do [AmazonS3](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html). [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html)

O exemplo a seguir mostra como especificar o modo de repetição *padrão*, no máximo 3 tentativas, um tempo limite de 10 segundos e um read/write tempo limite de 10 segundos (se aplicável). O construtor [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html) recebe um objeto [AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html).

```
var s3Client = new AmazonS3Client(
  new AmazonS3Config
  {
    Timeout = TimeSpan.FromSeconds(10),
    // NOTE: The following property is obsolete for
    //       versions of the AWS SDK para .NET that target .NET Core.
    ReadWriteTimeout = TimeSpan.FromSeconds(10),
    RetryMode = RequestRetryMode.Standard,
    MaxErrorRetry = 3
  });
```