Apariencia
Leer desde varios consumidores
AsyncEnumerableResult<T> permite obtener varios enumeradores. Lo que recibe cada uno depende de la fuente.
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Results;
await using var resultado = AsyncEnumerableResult<int>.Ok(GenerarAsync());
await Task.WhenAll(LeerAsync("A", resultado), LeerAsync("B", resultado));
static async IAsyncEnumerable<int> GenerarAsync()
{
for (var numero = 1; numero <= 2; numero++)
{
await Task.Yield();
yield return numero;
}
}
static async Task LeerAsync(string nombre, IAsyncEnumerable<int> valores)
{
await foreach (var valor in valores)
Console.WriteLine($"{nombre}: {valor}");
}Este iterador produce 1 y 2 para cada consumidor. El orden entre A y B puede variar.
Con varios lectores de Channel.Reader.ReadAllAsync(), los lectores compiten por los elementos del canal. El resultado no añade difusión, caché ni garantías de seguridad a la fuente original.
No hagas dos llamadas pendientes a MoveNextAsync() sobre el mismo enumerador: se rechaza la segunda. Para distribución explícita entre consumidores, usa StreamHub.
Recuerda: varios enumeradores no implican que todos reciban todos los elementos.