

La AWS SDK per .NET V3 è entrata in modalità manutenzione.

[Ti consigliamo di migrare alla V4.AWS SDK per .NET](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) Per ulteriori dettagli e informazioni su come eseguire la migrazione, consulta il nostro annuncio sulla modalità di [manutenzione](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Tentativi e timeout
<a name="retries-timeouts"></a>

 AWS SDK per .NET Consente di configurare il numero di tentativi e i valori di timeout per le richieste HTTP ai servizi. AWS Se i valori predefiniti per i nuovi tentativi e il timeout non sono appropriati per la tua applicazione, puoi regolarli in base alle tue esigenze, tuttavia è importante comprendere che questa modifica può influire sul comportamento dell'applicazione.

Per determinare i valori da utilizzare per i nuovi tentativi e i timeout, considera quanto segue:
+ Come devono reagire l'applicazione AWS SDK per .NET e la vostra applicazione quando la connettività di rete peggiora o un AWS servizio non è raggiungibile? Preferisci che i tentativi di chiamata si interrompano presto o che continuino automaticamente?
+ La tua applicazione è o sito Web o un'applicazione rivolta agli utenti che deve essere reattiva o è un processo di elaborazione in background con una maggiore tolleranza rispetto alle latenze più lunghe?
+ L'applicazione è distribuita su una rete affidabile con bassa latenza o viene distribuita in una posizione remota con connettività inaffidabile?

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

### Panoramica di
<a name="w2aac11c13c11b5"></a>

 AWS SDK per .NET Possono riprovare le richieste che non vanno a buon fine a causa di limitazioni sul lato server o interruzioni delle connessioni. Esistono due proprietà delle classi di configurazione del servizio che è possibile utilizzare per specificare il comportamento di ripetizione dei tentativi di un client di servizio. [Le classi di configurazione del servizio ereditano queste proprietà dall'astratto Amazon.Runtime. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)ClientConfig[classe dell'API Reference:AWS SDK per .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/)
+ `RetryMode`[specifica una delle tre modalità di riprova, definite in Amazon.Runtime. RequestRetryMode](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TRequestRetryMode.html)enumerazione.

  Il valore predefinito per l'applicazione può essere controllato utilizzando la variabile di `AWS_RETRY_MODE` ambiente o l'impostazione *retry\_mode* nel file di configurazione condiviso. AWS 
+ `MaxErrorRetry`specifica il numero di tentativi consentiti a livello di client di servizio; l'SDK riprova l'operazione il numero di volte specificato prima di fallire e generare un'eccezione.

  Il valore predefinito per l'applicazione può essere controllato utilizzando la variabile di `AWS_MAX_ATTEMPTS` ambiente o l'impostazione *max\_attempts* nel file di configurazione condiviso. AWS 

[Le descrizioni dettagliate di queste proprietà sono disponibili nell'estratto Amazon.Runtime. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)ClientConfig[classe dell'API Reference.AWS SDK per .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/) Ogni valore di `RetryMode` corrisponde per impostazione predefinita a un particolare valore di`MaxErrorRetry`, come illustrato nella tabella seguente.

|  |  |  | 
| --- |--- |--- |
| Legacy | 10 | 4 | 
| Standard | 10 | 2 | 
| Adattabile (sperimentale) | 10 | 2 | 

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

**All'avvio dell'applicazione**

All'avvio dell'applicazione, i valori predefiniti per `RetryMode` e `MaxErrorRetry` vengono configurati dall'SDK. Questi valori predefiniti vengono utilizzati quando si crea un client di servizio, a meno che non si specifichino altri valori.
+ Se le proprietà non sono impostate nell'ambiente, l'impostazione predefinita per `RetryMode` è configurata come *Legacy* e l'impostazione predefinita per `MaxErrorRetry` è configurata con il valore corrispondente della tabella precedente.
+ Se la modalità di riprova è stata impostata nell'ambiente in uso, tale valore viene utilizzato come valore predefinito per. `RetryMode` Il valore predefinito per `MaxErrorRetry` è configurato con il valore corrispondente della tabella precedente, a meno che nell'ambiente in uso non sia stato impostato anche il valore per il numero massimo di errori (descritto di seguito).
+ Se il valore per il numero massimo di errori è stato impostato nell'ambiente, tale valore viene utilizzato come valore predefinito per`MaxErrorRetry`. Amazon DynamoDB è l'eccezione a questa regola; il valore DynamoDB predefinito `MaxErrorRetry` per è sempre il valore della tabella precedente.

**Durante l'esecuzione dell'applicazione**

Quando si crea un client di servizio, è possibile utilizzare i valori predefiniti per `RetryMode` e`MaxErrorRetry`, come descritto in precedenza, oppure specificare altri valori. Per specificare altri valori, crea e includi un oggetto di configurazione del servizio come [Amazon [AmazonDynamoDBConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/DynamoDBv2/TDynamoDBConfig.html)o Amazon SQSConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TSQSConfig.html) quando crei il client di servizio.

Questi valori non possono essere modificati per un client di servizio dopo la sua creazione.

**Considerazioni**

Quando si verifica un nuovo tentativo, la latenza della richiesta aumenta. Devi configurare i nuovi tentativi in base ai limiti dell'applicazione in termini di latenza della richiesta totale e percentuali di errore.

## Timeout
<a name="timeouts"></a>

 AWS SDK per .NET Consente di configurare i timeout delle richieste a livello di client di servizio e per metodo di chiamata. Esistono due meccanismi per configurare i timeout, descritti nelle sezioni successive:
+ Se si utilizzano [chiamate asincrone](#timeouts-async), è possibile utilizzare il parametro del metodo. `CancellationToken`
+ [Se utilizzi [chiamate sincrone in.NET Framework](#timeouts-sync-framework), puoi utilizzare le `ReadWriteTimeout` proprietà `Timeout` e dell'oggetto astratto Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe.

### Utilizzo del `CancellationToken` parametro per i timeout
<a name="timeouts-async"></a>

 AWS SDK per .NET Consente di configurare i timeout delle richieste per le chiamate asincrone utilizzando il parametro. `CancellationToken` Il seguente frammento di codice mostra un esempio. Il codice viene generato `System.Threading.Tasks.TaskCanceledException` se la richiesta non viene completata entro 10 secondi.

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

### Utilizzo delle `ReadWriteTimeout` proprietà `Timeout` and per i timeout
<a name="timeouts-sync-framework"></a>

**Nota**  
La `Timeout` proprietà non influisce sulle chiamate asincrone. Se si utilizzano chiamate asincrone, vedere invece. [Utilizzo del `CancellationToken` parametro per i timeout](#timeouts-async)

 AWS SDK per .NET Consente di configurare i valori di timeout della richiesta e del timeout del socket a livello di read/write client di servizio. [Questi valori sono specificati nelle `ReadWriteTimeout` proprietà `Timeout` e dell'oggetto astratto Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe. Questi valori vengono trasmessi come `ReadWriteTimeout` proprietà `Timeout` e degli [HttpWebRequest](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest)oggetti creati dall'oggetto client del AWS servizio. Per impostazione predefinita, il valore `Timeout` è di 100 secondi e il valore `ReadWriteTimeout` è di 300 secondi.

Se la rete ha una latenza elevata o se esistono condizioni che causano la ripetizione di un'operazione, l'utilizzo di valori lunghi per il timeout e di un elevato numero di tentativi può far sì che alcune operazioni dell'SDK sembrino non rispondere.

**Nota**  
La versione di destinata alla AWS SDK per .NET Portable Class Library (PCL) utilizza la [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)classe anziché la `HttpWebRequest` classe e supporta solo la proprietà [Timeout](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout).

Di seguito sono elencate le eccezioni per i valori di timeout predefiniti. Questi valori vengono sovrascritti quando imposti esplicitamente i valori di timeout.
+ `Timeout`[e `ReadWriteTimeout` sono impostati sui valori massimi se il metodo chiamato carica uno stream, come AmazonS3Client. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3PutObjectAsyncPutObjectRequestCancellationToken.html)PutObjectAsync[(), client Amazon S3. ](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3UploadPartAsyncUploadPartRequestCancellationToken.html)UploadPartAsync[(),. AmazonGlacierClient UploadArchiveAsync()](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/MGlacierUploadArchiveAsyncUploadArchiveRequestCancellationToken.html) e così via.
+ Le versioni di destinazione.NET Framework impostate `Timeout` e `ReadWriteTimeout` impostano i valori massimi per tutti gli [Amazons3Client](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html) e gli oggetti. AWS SDK per .NET [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/TGlacierClient.html)
+ [Le versioni destinate alla AWS SDK per .NET Portable Class Library (PCL) e.NET Core sono impostate sul valore massimo per tutti gli `Timeout` AmazonS3Client e gli oggetti. [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/TGlacierClient.html)](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html)

L'esempio seguente mostra come specificare la modalità di riprova *standard*, un massimo di 3 tentativi, un timeout di 10 secondi e un read/write timeout di 10 secondi (se applicabile). [Al [costruttore AmazonS3Client viene assegnato un oggetto AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html).](https://docs.aws.amazon.com/sdkfornet/v3/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 per .NET that target .NET Core.
    ReadWriteTimeout = TimeSpan.FromSeconds(10),
    RetryMode = RequestRetryMode.Standard,
    MaxErrorRetry = 3
  });
```