加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在我的C#应用??程序中结合使用Task和IObservable是不好的做法?

发布时间:2020-12-15 23:44:41 所属栏目:百科 来源:网络整理
导读:我最近进入了Rx,我正在使用它来帮助我从数据挖掘应用程序中的几个API中提取数据. 我有一个为每个API实现的接口,它封装了对每个API的常见调用,例如: public interface IMyApi { IObservablestring GetApiName(); //Cold feed for getting the API's name. IO
我最近进入了Rx,我正在使用它来帮助我从数据挖掘应用程序中的几个API中提取数据.

我有一个为每个API实现的接口,它封装了对每个API的常见调用,例如:

public interface IMyApi {

    IObservable<string> GetApiName(); //Cold feed for getting the API's name.

    IObservable<int> GetNumberFeed(); //Hot feed of numbers from the API

}

我的问题是关于冷IObservables vs Tasks.在我看来,冷可观察基本上是一项任务,它们的运作方式大致相同.当你可以争辩说任务就是你所需要的时候,把一个任务“抽象”为一个冷酷的观察者,这让我感到很奇怪.同时使用cold observable来包装Tasks会隐藏活动的性质,因为签名看起来与热的observable相同.

我可以代表上述界面的另一种方式是:

public interface IMyApi {

    Task<string> GetApiNameAsync(); //Async method for getting the API's name.

    IObservable<int> GetNumberFeed(); //Hot feed of numbers from the API

}

对于为什么我不应该在Tasks和IObservable之间混合和匹配,有一些传统的智慧吗?

编辑:澄清 – 我已经阅读了其他发布的讨论并理解了Rx和TPL之间的关系,但我的担忧主要在于将两者结合在一个应用程序中是否安全,以及它是否会导致不良做法或线程化和调度陷阱?

解决方法

混合模型没有问题,事实上即使是Rx团队也在Rx中包含了许多自适应运算符.例如,ToTask,ToObservable,SelectMany,DeferAsync,StartAsync,ToAsync等.您甚至可以等待IObservable< T>在异步方法中.

影响您决定的主要区别是基数:

的IObservable< T>是[0,∞]

任务< T>是[0,1]

因此,如果您只需要表示一个返回值,那么请强烈考虑使用Task< T>.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读