Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿CancelledError al esperar una tarea que cancelaste? No ocultes el apagado del controlador

La tarea hija puede terminar cancelada cuando el controlador recibe otra cancelación externa. Separa propiedad, limpieza, resultados y propagación.

Mapa de origen de cancelación asyncio
Ilustración original: distingue hijo y controlador. Watch at Ease

La tarea hija puede terminar cancelada cuando el controlador recibe otra cancelación externa. Separa propiedad, limpieza, resultados y propagación.

CancelledError hereda de BaseException y normalmente se relanza tras limpiar. Task.cancel solicita cancelación; no garantiza que se acepte.

1. Nombra dueño y origen de cancelación

Lista controlador, hijos propios, quién cancela y destino de hermanos; no empieces con except-pass.

CancelledError al esperar al hijo puede ser su final o la cancelación externa del controlador; el tipo no prueba el origen.

2. Limpia el hijo en finally

Libera recursos del hijo en try/finally y normalmente propaga la cancelación. Otro await de limpieza también puede cancelarse.

La finalización asíncrona necesita un límite pequeño; no conviertas shield en un apagado infinito.

3. Elige TaskGroup o gather

Usa TaskGroup si el scope posee todos los hijos y el fallo debe cancelar hermanos; salir espera a todos.

Para resultados independientes, gather(return_exceptions=True) puede recoger cancelación del hijo; cancelar gather todavía se propaga.

4. Conserva la cancelación del controlador

Evita captura general alrededor de await child. Si es manual, registra estados y current_task().cancelling; vuelve a lanzar cancelación del controlador.

No uses uncancel solo para borrar estado. Suprimir cancelación es una decisión excepcional y deliberada.

5. Prueba cancelaciones simultáneas

Prueba hijo solo, controlador solo y ambos en el mismo turno; verifica limpieza, estados y propagación.

Al salir audita solo tareas propias y confirma que no quedan pendientes ni excepciones sin recuperar.

Mapa de cierre asyncio
Ilustración original: conserva propiedad y cancelación externa. Watch at Ease