gpt4 book ai didi

c# - 为什么在没有 .NET 的 Reactive(Rx) 扩展的情况下不能使用 IObservable

转载 作者:太空狗 更新时间:2023-10-29 22:14:08 25 4
gpt4 key购买 nike

试图理解why and when I would need为 .NET 使用 Reactive Extension (Rx),我开始质疑“C# 5.0 async/await feature and Rx - Reactive Extensions”,阅读它及其引用资料导致的问题多于答案。

后文中引用Task vs IObservable: when to use what?似乎是指 IObservable 的用法与 Reactive (Rx) extensions for .NET 的用法同义(或可互换)

例如,上述文章中的短语是什么:

Your code will require the reactive extensions if you chose to return IObservable

想说什么?

两者都是 Task<T> IObservable<T> 是 .NET 的一部分,我在没有任何 Rx 引用或设置的情况下使用它。
为什么我需要响应式扩展才能返回 IObservable

RX在讨论Task<T>时要做什么与 IObservable 相比?
为什么它们的用法并列?

最佳答案

实际上是因为易于实现。您永远不应该尝试实现 IObservable<T>你自己; Rx 可以正确有效地完成您可能需要的所有实现。

Rx design guidelines指定 IObservable<T> 的实际语义.请注意, MSDN example implementation是完全错误的。

更新:

MSDN 示例代码在以下语义中失败(引用编号是上述文档中的设计指南):

  • 不强制执行 Rx 语法 (4.1)。
  • 不会在 OnError 之后自动退订(4.3).
  • 可能无法正确处理极端情况(6.1、6.2)。
  • OnError没有中止语义(6.6)。
  • 如果处理订阅并重新订阅同一个观察者,则原始订阅不再是幂等的 (6.17)。

而且只有当自定义实现假定所有对 TrackLocation 的调用时才会这样。被序列化。在 Rx 世界中,几乎从来没有这种情况。

请注意,可以使用 Rx Synchronize 解决所有这些问题。运算符,尽管您仍然必须假设对 TrackLocation 的序列化调用.

关于c# - 为什么在没有 .NET 的 Reactive(Rx) 扩展的情况下不能使用 IObservable<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com