如何使用 C# 创建真正的函数管道?我有一些想法如下,但这不是一个真正的管道
public static IEnumerable<T> ForEachPipeline<T>(this IEnumerable<T> source, params Func<T, T>[] pipeline)
{
foreach (var element in source) {
yield return ExecutePipeline(element, pipeline);
}
}
private static T ExecutePipeline<T>(T element, IEnumerable<Func<T, T>> jobs)
{
var arg = element;
T result = default(T);
foreach (var job in jobs) {
result = job.Invoke(arg);
arg = result;
}
return result;
}
在上面的代码中,每个元素IEnumerable<T>
只有在前一个元素执行完所有函数(即退出管道)后才能进入管道,但根据定义如果element1
完成执行func1
并开始执行func2
,到那时element2
应该开始执行func1
并且依此类推,从而保持管道中数据的持续流动。
这种场景可以在 C# 中实现吗?如果可能,请给我一些示例代码。