Apariencia
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()); // 0Vací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.