Sobes.tech
Junior — Middle

Jak można zatrzymać wykonanie goroutine po upływie określonego czasu, jeśli wynik nie został otrzymany?

sobes.tech AI

Odpowiedź od AI

W Go, aby zatrzymać wykonywanie goroutine po określonym czasie, zwykle używa się select z timerem lub kontekstem z limitem czasu.

Przykład z time.After:

select {
case result := <-ch:
    // przetwarzanie wyniku
case <-time.After(2 * time.Second):
    // limit czasu — wynik nie został otrzymany w ciągu 2 sekund
}

Przykład z kontekstem:

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

select {
case result := <-ch:
    // przetwarzanie wyniku
case <-ctx.Done():
    // limit czasu lub anulowanie
}

W ten sposób, jeśli wynik nie nadejdzie na czas, można przerwać wykonanie i obsłużyć limit czasu.