

¡Se AWS SDK para .NET ha publicado la versión 4 (V4) del\$1

Para obtener información sobre los cambios más importantes y la migración de sus aplicaciones, consulte el [tema sobre migración](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)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Reintentos y tiempos de espera
<a name="retries-timeouts"></a>

 AWS SDK para .NET Le permite configurar el número de reintentos y los valores de tiempo de espera de las solicitudes HTTP a AWS los servicios. Si los valores predeterminados de los reintentos y los tiempos de espera no son adecuados para su aplicación, puede ajustarlos para sus requisitos específicos, pero es importante comprender cómo afectará hacer esto al comportamiento de su aplicación.

Para determinar qué valores usar para los reintentos y los tiempos de espera, tenga en cuenta lo siguiente:
+ ¿Cómo deben responder la aplicación AWS SDK para .NET y la suya cuando la conectividad de la red se deteriora o no se puede acceder a un AWS servicio? ¿Desea que la llamada fracase rápidamente o es adecuado que la llamada se siga reintentando en su nombre?
+ ¿Es su aplicación una aplicación o sitio web que se orienta a los usuarios y que debe tener capacidad de respuesta, o se trata de una tarea de procesamiento en segundo plano con una mayor tolerancia de las latencias más elevadas?
+ ¿La aplicación está implementada en una red fiable con baja latencia o en una ubicación remota con una conectividad poco fiable?

## Reintentos
<a name="retries"></a>

### Descripción general de
<a name="w2aac11c23c11b5"></a>

 AWS SDK para .NET Pueden reintentar las solicitudes que fallan debido a una limitación del lado del servidor o a una interrupción de las conexiones. Hay dos propiedades de las clases de configuración de servicios que se pueden usar para especificar el comportamiento de reintento de un cliente de servicio. [Las clases de configuración de servicios heredan estas propiedades del resumen Amazon.Runtime. ](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)ClientConfig[clase de la referencia de la API AWS SDK para .NET :](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/)
+ `RetryMode`especifica uno de los tres modos de reintento, que se definen en [Amazon.Runtime. RequestRetryMode](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TRequestRetryMode.html)enumeración.

  El valor predeterminado de la aplicación se puede controlar mediante la variable de `AWS_RETRY_MODE` entorno o el ajuste *retry\$1mode* del archivo de configuración compartido. AWS 
+ `MaxErrorRetry` especifica el número de reintentos permitidos en el nivel del cliente de servicio; SDK vuelve a intentar la operación el número de veces especificado antes de generar un error y lanzar una excepción.

  El valor predeterminado de la aplicación se puede controlar mediante la variable de `AWS_MAX_ATTEMPTS` entorno o la configuración *max\$1attempts* del archivo de configuración compartido. AWS 

[Las descripciones detalladas de estas propiedades se encuentran en el resumen Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)clase de la [AWS SDK para .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) Reference. Cada valor de `RetryMode` se corresponde de forma predeterminada con un valor concreto de `MaxErrorRetry`, como se muestra en la siguiente tabla.

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

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

**Cuando la aplicación se inicia**

Cuando la aplicación se inicia, SDK configura los valores predeterminados de `RetryMode` y `MaxErrorRetry`. Estos valores predeterminados se utilizarán cuando cree un cliente de servicio, a menos que especifique otros valores.
+ Si las propiedades no están configuradas en el entorno, el valor predeterminado de `RetryMode` se configura como *Heredado* y el valor predeterminado de `MaxErrorRetry` se configura con el valor correspondiente de la tabla anterior.
+ Si el modo de reintento está configurado en el entorno, ese valor se utiliza como valor predeterminado de `RetryMode`. El valor predeterminado de `MaxErrorRetry` se configura con el valor correspondiente de la tabla anterior, a menos que el valor de máximo de errores también esté configurado en el entorno (se describe a continuación).
+ Si el valor de máximo de errores está configurado en el entorno, ese valor se utiliza como valor predeterminado de `MaxErrorRetry`. Amazon DynamoDB es la excepción a esta regla; el valor de DynamoDB predeterminado de `MaxErrorRetry` es siempre el valor de la tabla anterior.

**Mientras la aplicación se ejecuta**

Al crear un cliente de servicio, puede usar los valores predeterminados de `RetryMode` y `MaxErrorRetry`, tal y como se ha explicado anteriormente, o bien puede especificar otros valores. Para especificar otros valores, cree e incluya un objeto de configuración de servicio, como [AmazonDynamoDBConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/DynamoDBv2/TDynamoDBConfig.html)[Amazon](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SQS/TSQSConfig.html), SQSConfig al crear el cliente de servicio.

Una vez creado el servicio de cliente, estos valores no podrán modificarse.

**Consideraciones**

Cuando se produce un reintento, aumenta la latencia de la solicitud. Debe configurar sus reintentos según los límites de su aplicación para la latencia de solicitudes total y las tasas de error.

## Tiempos de espera
<a name="timeouts"></a>

 AWS SDK para .NET Esto le permite configurar los tiempos de espera de las solicitudes a nivel del cliente de servicio y por método de llamada. Existen dos mecanismos para configurar los tiempos de espera, que se describen en las secciones siguientes:
+ Si utiliza [llamadas asíncronas](#timeouts-async), puede utilizar el parámetro `CancellationToken` del método.
+ [Si utiliza [llamadas sincrónicas en .NET Framework](#timeouts-sync-framework), puede utilizar las `ReadWriteTimeout` propiedades `Timeout` y del resumen Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)clase.

### Uso del parámetro `CancellationToken` para los tiempos de espera
<a name="timeouts-async"></a>

 AWS SDK para .NET Permite configurar los tiempos de espera de las solicitudes en llamadas asíncronas mediante el parámetro. `CancellationToken` El siguiente fragmento de código muestra un ejemplo. El código genera una excepción `System.Threading.Tasks.TaskCanceledException` si la solicitud no se completa en 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);
}
```

### Uso de las propiedades `Timeout` y `ReadWriteTimeout` para los tiempos de espera
<a name="timeouts-sync-framework"></a>

**nota**  
La propiedad `Timeout` no afecta a las llamadas asíncronas. Si utiliza llamadas asíncronas, consulte [Uso del parámetro `CancellationToken` para los tiempos de espera](#timeouts-async) en su lugar.

 AWS SDK para .NET Esto le permite configurar los valores de tiempo de espera de la solicitud y del tiempo de espera del socket a nivel del read/write cliente del servicio. [Estos valores se especifican en las `Timeout``ReadWriteTimeout` propiedades del resumen Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TClientConfig.html)clase. Estos valores se transmiten como `ReadWriteTimeout` propiedades de `Timeout` los [HttpWebRequest](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest)objetos creados por el objeto del cliente de AWS servicio. De forma predeterminada, el valor `Timeout` es de 100 segundos y el valor `ReadWriteTimeout` es de 300 segundos.

Cuando su red tiene una elevada latencia o existen condiciones que hacen que se reintente una operación, el uso de valores de tiempo de espera largo y un elevado número de reintentos pueden hacer que algunas operaciones del SDK parezcan no tener capacidad de respuesta.

**nota**  
La versión de la AWS SDK para .NET que se dirige a la biblioteca de clases portátil (PCL) utiliza la [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)clase en lugar de la `HttpWebRequest` clase y solo admite la propiedad [Timeout](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout).

A continuación, se indican las excepciones sobre los valores de tiempo de espera predeterminados. Estos valores se invalidan al establecer de forma explícita los valores de tiempo de espera.
+ `Timeout`[y `ReadWriteTimeout` se establecen en los valores máximos si el método al que se llama carga una transmisión, como AmazonS3Client. ](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3PutObjectAsyncPutObjectRequestCancellationToken.html)PutObjectAsync[(), cliente Amazon S3. ](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/MS3UploadPartAsyncUploadPartRequestCancellationToken.html)UploadPartAsync[(),. AmazonGlacierClient UploadArchiveAsync()](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/MGlacierUploadArchiveAsyncUploadArchiveRequestCancellationToken.html), y así sucesivamente.
+ Las versiones de .NET Framework de destino establecidas `Timeout` y `ReadWriteTimeout` con los valores máximos para todos los objetos y [clientes de Amazon S3](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html). AWS SDK para .NET [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html)
+ [Las versiones AWS SDK para .NET que se dirigen a la biblioteca de clases portátil (PCL) y a .NET Core están configuradas en el valor máximo `Timeout` para todos los objetos y clientes de AmazonS3Client. [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Glacier/TGlacierClient.html)](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html)

El siguiente ejemplo muestra cómo especificar el modo de reintento *estándar*, un máximo de 3 reintentos, un tiempo de espera de 10 segundos y un read/write tiempo de espera de 10 segundos (si corresponde). Al constructor [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html) se le asigna un 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
  });
```