我认为解决这个问题的最好方法是只关注问题的第一行——决定在给定场景中使用哪一个。
这两个库服务于不同的目的。推测每个设计的核心元素以寻找差异感觉就像问为什么粉笔尝起来不像奶酪 - 尽管我不能挑剔你列出的具体点。
根据我的经验,很少有非平凡的场景可以以任何明智的方式互换。我认为他们文档中的实际描述对这个问题做出了不言自明的回答:
接收
Reactive Extensions (Rx) 是一个库,用于使用可观察序列和 LINQ 样式的查询运算符组成异步和基于事件的程序。使用 Rx,开发人员使用 LINQ 运算符表示异步数据流,并使用调度程序参数化异步数据流中的并发性。简单来说,Rx = Observables + LINQ + Schedulers
我还会在这里查看我的其他答案,这在考虑 Rx 时非常相关:Where to draw the line with reactive programming。其本质是 Rx 有利于及时响应您无法控制的事件。
TPL 数据流
任务并行库 (TPL) 提供数据流组件来帮助提高支持并发的应用程序的稳健性。这些数据流组件统称为 TPL 数据流库。该数据流模型通过为粗粒度数据流和流水线任务提供进程内消息传递来促进基于参与者的编程。数据流组件建立在 TPL 的类型和调度基础架构之上,并与 C#、Visual Basic 和 F# 语言集成以支持异步编程。当您有多个必须以异步方式相互通信的操作或当您希望在数据可用时对其进行处理时,这些数据流组件非常有用。例如,考虑一个处理来自网络摄像头的图像数据的应用程序。通过使用数据流模型,应用程序可以在图像帧可用时对其进行处理。如果应用程序增强了图像帧,例如,通过执行光线校正或红眼消除,您可以创建数据流组件的管道。管道的每个阶段都可能使用更粗粒度的并行功能(例如 TPL 提供的功能)来转换图像。