Skip to content

Colecciones y secuencias

Enumeración síncrona

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

var resultado = EnumerableResult<int>.Ok([1, 2, 3]);
foreach (var numero in resultado)
    Console.WriteLine(numero);

var fallido = EnumerableResult<int>.Fail<NotFoundProcessError>();
Console.WriteLine(fallido.IsError); // True
Console.WriteLine(fallido.Count()); // 0

Vacío no significa éxito

Un enumerable fallido se recorre como una secuencia vacía. Comprueba IsError para distinguirlo de un resultado correcto sin elementos.

EnumerableResult<TEnumerable, TItem> permite conservar el tipo concreto de la colección. Las extensiones de composición operan sobre la secuencia; un Map no equivale automáticamente a un Select por elemento.

Enumeración asíncrona

csharp
using Greencore.Platform.Results;

await using var resultado = AsyncEnumerableResult<int>.Ok(Generar());
await foreach (var numero in resultado)
    Console.WriteLine(numero);

static async IAsyncEnumerable<int> Generar()
{
    yield return 1;
    await Task.Yield();
    yield return 2;
}

El resultado envuelve una secuencia asíncrona existente. Las excepciones producidas durante la lectura de esa secuencia no deben confundirse con el estado inicial del resultado.

Secuencia o stream

Usa AsyncEnumerableResult<TItem> cuando ya tienes un IAsyncEnumerable<TItem>. Usa StreamSource y StreamResult cuando un productor necesita publicar elementos en una suscripción y controlar capacidad, distribución y terminación.

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