Junior — Middle
¿Cómo se puede detener la ejecución de una gorutina si el valor esperado aún no se ha alcanzado?
sobes.tech AI
Respuesta de la IA
En Go, para detener una gorutina que espera un valor, pero ese valor puede no llegar, generalmente se usan canales con tiempo de espera o un contexto con cancelación.
Ejemplo con tiempo de espera usando select y time.After:
select {
case val := <-ch:
// se recibió un valor, continuar trabajando
case <-time.After(time.Second * 5):
// tiempo de espera agotado, detener la gorutina
}
Otra forma es usar un contexto (context.Context), que se puede cancelar desde fuera:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// procesar val
case <-ctx.Done():
// detener la gorutina
}
}()
// en algún momento del código, llamar a cancel() para detener la gorutina
De esta manera, la gorutina no quedará esperando indefinidamente y podrá terminarse correctamente.