Skip to content

Liberar una secuencia asíncrona ​

Usa await using cuando seas responsable del AsyncEnumerableResult. El await foreach libera su enumerador; el resultado administra el conjunto de enumeradores registrados.

csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Results;

await using var resultado = AsyncEnumerableResult<int>.Ok(GenerarAsync());
await foreach (var numero in resultado)
{
    Console.WriteLine(numero);
    break; // Libera este enumerador al salir del bucle.
}

static async IAsyncEnumerable<int> GenerarAsync()
{
    try
    {
        await Task.Yield();
        yield return 1;
        yield return 2;
    }
    finally
    {
        Console.WriteLine("Enumerador liberado.");
    }
}

DisposeAsync() cancela la vida útil, impide nuevos enumeradores y espera la disposición de los registrados, incluyendo sus avances pendientes. Una fuente que ignore la cancelación puede mantener esa espera abierta.

Dispose() bloquea esperando DisposeAsync(); no es una solicitud sin espera. En código asíncrono prefiere await using.

La liberación no dispone automáticamente el objeto fuente original ni espera el trabajo arbitrario del cuerpo del bucle. Si tienes un productor independiente o consumidores ejecutándose en tareas, coordina su cancelación y espera sus tareas.

Recuerda: dispone el resultado y conserva las tareas del trabajo que tú iniciaste.

Uso personal limitado. Uso comercial sujeto a autorización escrita.