Skip to main content

Estado asíncrono

El estado asíncrono (IEstadoAsync) es un almacén ligero y compartido para procesos largos. Guarda información de progreso y cancelación en la caché, de modo que varios servidores puedan intercambiarla: cualquier solicitud, incluso en otro nodo de la granja, puede leer la entrada para mostrar una barra de progreso o cancelar el trabajo.

Uso en Crono

El caso más representativo en Crono es el programador de tareas: al ejecutar una tarea larga, su estado (progreso y token de cancelación) se registra en el estado asíncrono, identificado por una clave de la tarea. Así, la interfaz del backend puede consultar el avance —y el usuario puede cancelar la tarea— aunque la ejecución ocurra en otro servidor.

En la práctica, el progreso visible de una tarea se propaga con TareaEjecucionContexto.EstablecerProgresoAsync, que lo persiste de inmediato; la interfaz lo consulta cada segundo (ver Programación de tareas).

Ciclo de vida de una entrada

Conceptualmente, una entrada de estado asíncrono:

  1. Se crea con un objeto de estado inicial y, opcionalmente, un CancellationTokenSource para permitir la cancelación externa.
  2. Se actualiza mutando el objeto almacenado a medida que avanza el proceso.
  3. Se lee desde cualquier solicitud para mostrar el progreso.
  4. Se cancela solicitando la parada (se cancela el token almacenado).
  5. Se elimina al terminar (las entradas también expiran tras un periodo de inactividad).

La clave de una entrada combina el tipo del estado y un nombre opcional, lo que permite tener varios procesos del mismo tipo en paralelo.

info

Este mecanismo es especialmente útil cuando el trabajo largo puede ejecutarse en un servidor distinto al que atiende la solicitud del usuario: al vivir el estado en la caché compartida, el progreso y la cancelación funcionan de forma transparente en toda la granja.