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>
、前の要素がすべての関数の実行を終了した後 (つまり、パイプラインを終了した後) にのみパイプラインに入ることができますが、定義によれば、 if の実行がelement1
終了して実行がfunc1
開始func2
されると、その時までに実行element2
が開始されfunc1
、このようにして、パイプライン内の継続的なデータの流れを維持します。
この種のシナリオは C# で実装できますか? 可能であれば、サンプルコードを教えてください。