Core.Fork - Dmitry-Bychenko/Amphisbaena GitHub Wiki
Split initial ChannelReader into several ones according to conditions.
public static ChannelReader<T>[] Fork<T>(this ChannelReader<T> reader,
IEnumerable<Func<T, bool>> conditions,
ChannelParallelOptions options)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;