Come creare una vera pipeline di funzioni utilizzando C#? Ho qualche idea, come i seguenti, ma non è un vero e proprio oleodottoCome implementare la vera pipeline di funzioni in 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;
}
Nel codice sopra ogni elemento di IEnumerable<T>
sarebbe in grado di ottenere nella pipeline solo dopo che l'elemento precedente termina l'esecuzione di tutte le funzioni (ad esempio uscite la pipeline), ma secondo la definizione se element1
termina l'esecuzione di func1
e inizia l'esecuzione di func2
, a quel punto dovrebbe iniziare l'esecuzione di func1
e così via mantenendo così il flusso continuo di dati nella pipeline.
Questo tipo di scenario è possibile implementare in C#? Se possibile, dammi qualche codice di esempio.
Esiste solo un singolo contesto di esecuzione a meno che non vengano introdotti i thread (l'approccio alternativo con un thread singolo è solo la generazione di risultati non pigro ad ogni passaggio). Con i thread, ogni fase è solo una coda FIFO che trasmette messaggi attorno a una "pompa". I thread (in realtà, la concorrenza) aumentano notevolmente la complessità, forse si vedono i metodi .NET4 "Parallel". –
Non ho problemi nell'introdurre discussioni, ho bisogno che il lavoro sia fatto comunque .. per favore condividi alcune idee –
PLINQ non risolverebbe già questo? http://msdn.microsoft.com/en-us/library/dd460688.aspx – bzlm