Wie erstellt man eine echte Funktionspipeline mit C#? Ich habe wie eine Idee wie folgt, aber es ist keine echte PipelineWie wird eine echte Funktionspipeline in C# implementiert?
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 jedes Element IEnumerable<T>
würde nur in der Lage in die Rohrleitung zu erhalten, nachdem das vorherige Element beendet alle Funktionen ausführt (dh Ausgänge die Pipeline), aber gemäß der Definition, wenn element1
die Ausführung von func1
beendet und die Ausführung von func2
beginnt, sollte element2
zu diesem Zeitpunkt mit der Ausführung von func1
und so weiter beginnen, damit der Datenfluss in der Pipeline fortgesetzt wird.
Ist diese Art von Szenario in C# zu implementieren? Wenn möglich, geben Sie mir bitte einen Beispielcode.
Es gibt nur einen einzigen Ausführungskontext, es sei denn, es werden Threads eingeführt (der alternative Ansatz mit einem einzigen Thread ist nur das nicht-faule Ergebnis, das bei jedem Schritt entsteht). Bei Threads ist jede Stufe nur eine FIFO-Warteschlange, die Nachrichten um eine "Pumpe" herum leitet. Threads (eigentlich Parallelität) erhöhen ebenfalls die Komplexität erheblich, siehe vielleicht die .NET4 "Parallel" -Methoden. –
Ich habe kein Problem bei der Einführung von Threads, ich brauche die Arbeit sowieso getan werden .. bitte teilen Sie einige Ideen –
Würde PLINQ dies nicht schon lösen? http://msdn.microsoft.com/en-us/library/dd460688.aspx – bzlm