Как создать настоящий конвейер функции с помощью 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 #? Если возможно, приведите пример кода.