C# 如果没有并发性,我应该使用TPL数据流来对抗复杂性吗?

C# 如果没有并发性,我应该使用TPL数据流来对抗复杂性吗?,c#,tpl-dataflow,C#,Tpl Dataflow,我有一个项目,在语义上有工作流块。该解决方案不涉及任何并发或CPU限制的操作,也不需要可伸缩性。我只有一个输入,它被处理并通过块的管道。每个块处理项目并做出决定,然后将其传递给下一个块。为了对抗复杂性,使用TPL数据流可以吗?还是因为没有并发性,我应该使用常规的OOP策略,这会是一种过度的杀伤力?换句话说,TPL DataFlow是否适合此项工作?DataFlow正是针对您不需要的因素而设计的(“该解决方案不涉及任何并发性或CPU限制的操作,也不需要可伸缩性”) 一连串的方法有什么问题 var

我有一个项目,在语义上有工作流块。该解决方案不涉及任何并发或CPU限制的操作,也不需要可伸缩性。我只有一个输入,它被处理并通过块的管道。每个块处理项目并做出决定,然后将其传递给下一个块。为了对抗复杂性,使用TPL数据流可以吗?还是因为没有并发性,我应该使用常规的OOP策略,这会是一种过度的杀伤力?换句话说,TPL DataFlow是否适合此项工作?

DataFlow正是针对您不需要的因素而设计的(
“该解决方案不涉及任何并发性或CPU限制的操作,也不需要可伸缩性”

一连串的方法有什么问题

var input = ...;
var result1 = F1(input);
var result2 = F2(result1);
var result3 = F3(result2);
return result3;

你所描述的是如此简单,我认为没有必要再做更多的事情。特别是,目前尚不清楚(但可能)OOP是否匹配。您尚未描述对象或数据。您描述了一个映射到代码而不是对象的过程。

您是对的。我有一个习惯,有时过度工程的事情。需要第二个意见。谢谢。它应该是
F2(result1)
F3(result2)
?关于这个==>“解决方案不涉及任何并发性”,您的意思是不需要或不需要并发性?因为当您有多个TPL数据流块链接在一起时,您具有自然并发性,因为第一个块的输出由第二个块处理,而第一个块同时处理新的输入值。为了避免管道中的并发,您必须采取特定措施,例如使用相同的
ConcurrentExclusiveSchedulerPair.ExclusiveScheduler
配置每个块。多年后,回顾过去,我已切换到函数式编程范式,并使用Haskell箭头(尽管在F#中)来完成此任务。当涉及并发时,我使用akka.net streams来代替.Hi Onur。我没有太多使用Akka.Net,所以我不知道它与第三方物流数据流相比如何。如果你有实际经验和观点可以分享,我很乐意阅读!这是一个相关的问题,如果你愿意,你可以分享你的观点。