nae*_*n84 18 .net task-parallel-library system.reactive tpl-dataflow
经过几天的googleing后,我想我无法确定哪一个是针对什么情况.当然我想使用一个结合两者的完美框架(当然是不现实的).我甚至知道可以一起使用它们.但真正的问题是,每个核心设计元素中的核心设计元素是什么,使得无法模仿另一个核心设计元素.这些是我发现的:
如果有一些不是列表的理解而是试图从一个只讨论结构差异的公共抽象类/类别派生出来的东西,那将是很好的.
我认为解决这个问题的最佳方法是只关注问题的第一行 - 决定在给定方案中使用哪一个.
这两个库有不同的用途.推测每个设计的核心元素以寻找差异感觉就像问为什么粉笔不像奶酪一样 - 虽然我不能错过你列出的具体要点.
根据我的经验,很少有非平凡的场景,它们可以以任何合理的方式互换.我认为他们的文档中的实际描述对这个问题做了一个非常不言自明的答案:
Reactive Extensions(Rx)是一个库,用于使用可观察序列和LINQ样式查询运算符组合异步和基于事件的程序.使用Rx,开发人员使用LINQ运算符表示异步数据流,并使用调度程序参数化异步数据流中的并发性.简单地说,Rx = Observables + LINQ + Schedulers
我还会在这里看看我的另一个答案,这在考虑Rx时是非常相关的:在哪里用反应式编程绘制线.其实质是Rx适用于响应您未及时控制的事件.
任务并行库(TPL)提供数据流组件,以帮助提高启用并发的应用程序的健壮性.这些数据流组件统称为TPL数据流库.此数据流模型通过为粗粒度数据流和流水线操作任务提供进程内消息传递来促进基于actor的编程.数据流组件构建在TPL的类型和调度基础结构之上,并与用于异步编程的C#,Visual Basic和F#语言集成.当您有多个必须以异步方式相互通信的操作或希望在数据可用时处理数据时,这些数据流组件非常有用.例如,考虑一个处理来自网络摄像头的图像数据的应用程序.通过使用数据流模型,应用程序可以在图像帧可用时处理它们.如果应用程序增强了图像帧,例如,通过执行光线校正或防红眼,您可以创建数据流组件管道.管道的每个阶段可能使用更粗粒度的并行功能,例如TPL提供的功能来转换图像.