gpt4 book ai didi

c# - 如何在C#中实现真正的函数管道?

转载 作者:太空狗 更新时间:2023-10-29 23:53:06 26 4
gpt4 key购买 nike

如何使用 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#实现吗?如果可能,请给我一些示例代码。

最佳答案

来自评论:除非引入线程,否则只有一个执行上下文(单线程的替代方法只是在每一步构建非惰性结果)。对于线程,每个阶段只是一个 FIFO 队列,在“泵”周围传递消息。线程(实际上是并发)也大大增加了复杂性,或许可以看看 .NET4 的“并行”方法。

一个“简单”的方法就是使用 Parallel.ForEach 配置 N 个“启动” -- 当且仅当您可以保证计算没有副作用。

编辑:查看评论。

关于c# - 如何在C#中实现真正的函数管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com