Core.Fork - Dmitry-Bychenko/Amphisbaena GitHub Wiki

Fork

Split initial ChannelReader into several ones according to conditions.

Declaration (has overloads)

public static ChannelReader<T>[] Fork<T>(this ChannelReader<T> reader,
                                              IEnumerable<Func<T, bool>> conditions,
                                              ChannelParallelOptions options)

Example

using Amphisbaena;
using Amphisbaena.Linq;

...

int[] data = Enumerable
  .Range(0, 10000)
  .Select(x => x)
  .ToArray();

var forks = data
  .ToChannelReader()
  .Fork(x => x % 2 == 0,
        x => x % 2 != 0);

var evenTask = forks[0].Aggregate((s, a) => s + a);
var oddTask = forks[1].Aggregate((s, a) => s + a);

await Task.WhenAll(evenTask, oddTask);

int evenSum = await evenTask;
int oddSum = await oddTask;
⚠️ **GitHub.com Fallback** ⚠️