

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à.

# Usare i camerieri nell' AWS SDK for Ruby
<a name="using-waiters"></a>

I camerieri sono metodi di utilità che verificano il verificarsi di uno stato particolare su un cliente. I camerieri possono fallire dopo diversi tentativi a un intervallo di polling definito per il cliente del servizio. Per un esempio di come viene utilizzato un cameriere, consulta il metodo [create\_table](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/ruby/example_code/dynamodb/scaffold.rb#L63) del client di crittografia Amazon DynamoDB nel Code Examples Repository. AWS 

## Invocare un cameriere
<a name="aws-ruby-sdk-waiter-invoking"></a>

Per invocare un cameriere, chiama `wait_until` un cliente del servizio. Nell'esempio seguente, un cameriere attende che l'istanza `i-12345678` sia in esecuzione prima di continuare.

```
ec2 = Aws::EC2::Client.new

begin
  ec2.wait_until(:instance_running, instance_ids:['i-12345678'])
  puts "instance running"
rescue Aws::Waiters::Errors::WaiterFailed => error
  puts "failed waiting for instance running: #{error.message}"
end
```

Il primo parametro è il nome del cameriere, che è specifico del client del servizio e indica quale operazione è attesa. Il secondo parametro è un hash di parametri che vengono passati al metodo client chiamato dal cameriere, che varia in base al nome del cameriere.

Per un elenco delle operazioni che possono essere attese e dei metodi client richiamati per ciascuna operazione, consultate la documentazione `wait_until` sul campo `waiter_names` e relativa al client che state utilizzando.

## Attendi gli errori
<a name="aws-ruby-sdk-wait-failures"></a>

I camerieri possono fallire con una delle seguenti eccezioni.

** [As: :Waiters: :Errors: FailureStateError](https://docs.aws.amazon.com/sdk-for-ruby/v3/api//Aws/Waiters/Errors/FailureStateError.html) **  
È stato rilevato uno stato di errore durante l'attesa.

** [As: :Waiters: :Errors: NoSuchWaiterError](https://docs.aws.amazon.com/sdk-for-ruby/v3/api//Aws/Waiters/Errors/NoSuchWaiterError.html) **  
Il nome del cameriere specificato non è definito per il client utilizzato.

** [As: :Waiters: :Errors: TooManyAttemptsError](https://docs.aws.amazon.com/sdk-for-ruby/v3/api//Aws/Waiters/Errors/TooManyAttemptsError.html) **  
Il numero di tentativi ha superato il valore del cameriere. `max_attempts`

** [As: :Waiters: :Errors: UnexpectedError](https://docs.aws.amazon.com/sdk-for-ruby/v3/api//Aws/Waiters/Errors/UnexpectedError.html) **  
Si è verificato un errore imprevisto durante l'attesa.

** [As: :Waiters: :Errors: WaiterFailed](https://docs.aws.amazon.com/sdk-for-ruby/v3/api//Aws/Waiters/Errors/WaiterFailed.html) **  
Uno degli stati di attesa è stato superato o si è verificato un altro errore durante l'attesa.

Tutti questi errori, tranne, si basano `NoSuchWaiterError` su. `WaiterFailed` Per catturare gli errori in un cameriere, usa`WaiterFailed`, come mostrato nell'esempio seguente.

```
rescue Aws::Waiters::Errors::WaiterFailed => error
  puts "failed waiting for instance running: #{error.message}"
end
```

## Configurazione di un cameriere
<a name="aws-ruby-sdk-configuring-waiters"></a>

Ogni cameriere ha un intervallo di polling predefinito e un numero massimo di tentativi da effettuare prima di riprendere il controllo del programma. Per impostare questi valori, utilizzate i `delay:` parametri `max_attempts` and nella chiamata. `wait_until` L'esempio seguente attende fino a 25 secondi, con un polling ogni cinque secondi.

```
# Poll for ~25 seconds
client.wait_until(...) do |w|
  w.max_attempts = 5
  w.delay = 5
end
```

Per disattivare gli errori di attesa, impostate il valore di uno di questi parametri su. `nil`

## Allungare un cameriere
<a name="aws-ruby-sdk-extending-waiters"></a>

Per modificare il comportamento dei camerieri, è possibile registrare le callback che vengono attivate prima di ogni tentativo di sondaggio e prima di attendere.

L'esempio seguente implementa un backoff esponenziale in un cameriere raddoppiando il tempo di attesa per ogni tentativo.

```
ec2 = Aws::EC2::Client.new

ec2.wait_until(:instance_running, instance_ids:['i-12345678']) do |w|
  w.interval = 0 # disable normal sleep
  w.before_wait do |n, resp|
    sleep(n ** 2)
  end
end
```

L'esempio seguente disabilita il numero massimo di tentativi e attende invece un'ora (3600 secondi) prima di fallire.

```
started_at = Time.now
client.wait_until(...) do |w|
  # Disable max attempts
  w.max_attempts = nil

  # Poll for one hour, instead of a number of attempts
  w.before_wait do |attempts, response|
    throw :failure if Time.now - started_at > 3600
  end
end
```