所有这些反应性可观察的扩展之间有什么实际区别?
-
24-09-2019 - |
题
给定行为对象,调用所有这些不同功能之间的实际区别是什么?
- 第一的()
- 最后的()
- 最新value()
- mostrecentvalue()
- NextValue()
- 单身的()
- 取(1)
假设我理解正确,鉴于行为对象,他们都应该对同一件事做。
如果是这样,那么哪个电话是最合适的(我的意思是:最好传达我的意图)?也许是第一个还是单人?
如果没有,那么实际差异是什么?
解决方案
首先,最后一个和单身被阻止;建议使用(1)使用(1),因此您可以返回一个iObservable。链接查询操作员时,建议避免先,最后和单身,因为您退出了单子的安全性……也就是说,您的副作用是阻塞的。看 http://blogs.msdn.com/jeffva/archive/2009/12/12/09/first-last-contains-eetc-can-be-be-be-be-be-be--danger-danger--yet-yet-ectremely-use-aspx 有关此的更多信息。
根据最新版本,根据最新版本的RX,MostrecentValue和最新版本也已从最新版本中删除,因此它们正在阻止,因此唯一剩下的阻止操作员是第一,最后和单个(以及XXXODORDEFAULT变体)。
Mostrecent将返回所采样的最后一个值,就像您称之为时一样(并且需要一个初始价值来保证它永远不会等待),即“无需消耗”,而最新的等待直到值到达然后“用消耗返回” - 也就是说,如果您再次调用最新消息,它将不会返回与上一个呼叫相同的值,它将等到下一个值到达(如果有的话)。
其他提示
感谢@richardhein的出色答案。
阻止扩展方法应真正移至自己的名称空间中,因此开发人员必须专门选择将它们包括在项目(或CS文件)中。您与RX添加了很多复杂性,并且通过使用阻止方法意外地将您基本上转移回ILIST/IENUMETAR。
我认为这是RX团队犯的最大错误,我认为通过默认将它们包括在内,他们错过了RX的“成功坑”。修复此问题,我将RX称为首选API,超越了C#中的单线线程 +异步(即为什么.NET比SAVE NODEJS更强大)。