Saltar al contenido
TIL · 1 min de lectura

TIL: IAsyncEnumerable en .NET — cancelación y backpressure sin sustos

Aprendizaje práctico sobre cómo consumir IAsyncEnumerable de forma segura en APIs y workers, controlando cancelación y evitando cuellos de botella silenciosos.

TL;DR

IAsyncEnumerable es potente, pero si no propagas CancellationToken y controlas el ritmo de consumo, puedes generar trabajo inútil y picos de memoria.

.NETC#TILRendimientoAsync
Índice

Hoy me he encontrado con un problema clásico: stream asíncrono correcto en local, comportamiento errático en carga real.

La causa no era el algoritmo, sino dos detalles de uso de IAsyncEnumerable<T>.

1) Propaga siempre el CancellationToken

await foreach (var item in source.WithCancellation(ct))
{
    await ProcessAsync(item, ct);
}

Sin WithCancellation(ct), cuando el cliente cancela la petición el productor puede seguir generando elementos un rato.
Eso se traduce en trabajo inútil y consumo innecesario.

2) Controla el ritmo de consumo

IAsyncEnumerable no es magia contra backpressure.
Si cada item dispara IO costoso en paralelo sin límite, saturas recursos rápidamente.

Patrón seguro para fan-out moderado:

  1. buffer acotado,
  2. grado de paralelismo explícito,
  3. timeouts por operación externa.

Regla práctica

  • Flujo secuencial: await foreach directo.
  • Flujo paralelo: límite de concurrencia claro (por ejemplo, SemaphoreSlim).
  • Llamadas externas: timeout + cancelación enlazada.

TL;DR

IAsyncEnumerable mejora latencia percibida y uso de memoria cuando se aplica bien.
Pero en producción, cancelación y control de ritmo son obligatorios para evitar comportamiento frágil.

Sigue leyendo

TIL

TIL: ImmutableArray vs FrozenSet en .NET 8

FrozenSet es para 'read many, write never'. ImmutableHashSet es para 'safe concurrency + occasional writes'. Elige según el patrón de acceso.

#.NET#C##Performance
Weekly

Weekly 2026-07-27: Resumen técnico y noticias de la semana

Integración semanal de opiniones y datos clave del ecosistema: la aceleración del Open Source con Kimi K3, la arquitectura pragmática en .NET y el factor humano en los equipos de desarrollo.

#AI#Noticias#Productividad#.NET#Weekly