Junior — Middle
Cum poți opri execuția unei goroutine dacă valoarea așteptată nu a fost încă atinsă?
sobes.tech AI
Răspuns de la AI
În Go, pentru a opri o gorutină care așteaptă o valoare, dar această valoare poate să nu sosească, se folosesc de obicei canale cu timeout sau context cu anulare.
Exemplu cu timeout folosind select și time.After:
select {
case val := <-ch:
// valoarea a fost primită, continuă munca
case <-time.After(time.Second * 5):
// timeout, oprește gorutina
}
Alt mod este să folosești un context (context.Context), care poate fi anulat din exterior:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// procesează val
case <-ctx.Done():
// oprește gorutina
}
}()
// undeva în cod, apelează cancel() pentru a opri gorutina
Astfel, gorutina nu va aștepta la nesfârșit și se poate termina în mod corect.