Sobes.tech
Junior — Middle

Come si può interrompere l'esecuzione di una goroutine dopo un tempo specificato se non si è ricevuto alcun risultato?

sobes.tech AI

Risposta dell'AI

In Go, per interrompere l'esecuzione di una goroutine dopo un tempo specificato, si utilizza generalmente select con un timer o un contesto con timeout.

Esempio con time.After:

select {
case result := <-ch:
    // elaborare il risultato
case <-time.After(2 * time.Second):
    // timeout — risultato non ricevuto in 2 secondi
}

Esempio con contesto:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case result := <-ch:
    // elaborare il risultato
case <-ctx.Done():
    // timeout o cancellazione
}

In questo modo, se il risultato non arriva in tempo, l'esecuzione può essere interrotta e il timeout gestito.