我最近进入了Rx,我正在使用它来帮助我从数据挖掘应用程序中的几个API中提取数据.
我有一个为每个API实现的接口,它封装了对每个API的公共调用,例如
public interface IMyApi { IObservableGetApiName(); //Cold feed for getting the API's name. IObservable GetNumberFeed(); //Hot feed of numbers from the API }
我的问题是关于冷IObservables vs Tasks.在我看来,冷可观察基本上是一项任务,它们的运作方式大致相同.当你可以争辩说任务就是你所需要的时候,把一个任务"抽象"为一个冷酷的观察者,这让我感到很奇怪.同时使用cold observable来包装Tasks会隐藏活动的性质,因为签名看起来与热的observable相同.
我可以代表上述界面的另一种方式是:
public interface IMyApi { TaskGetApiNameAsync(); //Async method for getting the API's name. IObservable GetNumberFeed(); //Hot feed of numbers from the API }
对于为什么我不应该在Tasks和IObservable之间混合和匹配,有一些传统的智慧吗?
编辑:澄清 - 我已经阅读了其他发布的讨论并理解了Rx和TPL之间的关系,但我的担忧主要在于将两者结合在一个应用程序中是否安全,以及它是否会导致不良做法或线程化和调度陷阱?