Wie erstellt man eine echte Funktionspipeline mit C#? Ich habe einige Idee wie folgt, aber es ist nicht eine echte Pipeline
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;
}
In dem obigen Code wird jedes Element von IEnumerable<T>
erst dann in die Pipeline gelangen, wenn das vorherige Element die Ausführung aller Funktionen beendet hat (d. h. die Pipeline verlässt), aber gemäß der Definition, wenn element1
beendet die Ausführung func1
und starten Sie die Ausführung func2
zu diesem Zeitpunkt element2
sollte mit der Ausführung von func1
und so weiter, um den Datenfluss in der Pipeline aufrechtzuerhalten.
Ist diese Art von Szenario möglich, in C# zu implementieren? Wenn möglich, geben Sie mir bitte einige Beispiel-Code.