【发布时间】:2014-06-26 22:39:57
【问题描述】:
假设我想公开一个 observable 立即通知,如果 Internet 连接现在可用,或者如果设备未连接到 Internet,则通知将在可用时推出:
IObservable<DateTime> InternetBecameAvailableSignalledOncePerSubscriber { get; }
此外,每个订阅应该只有一个通知,而不需要订阅者执行 .Take(1) 或类似的操作。
即依赖于 Internet 资源的客户端将使用这个 observable 现在或 Internet 可用时立即执行某些操作,但不会多次执行此操作 - 如果 Internet 变得不可用且可用,则不会再向该订阅者发出信号第二次..
如何使用 Reactive Extensions (Rx) 实现这一点?
- 请忽略互联网可以这样使用的有缺陷的概念,将其视为可访问 google.com 或您喜欢的任何风格的实现
【问题讨论】:
-
您可以使用 .Aggregate 执行此操作 - 但在这种情况下,我建议您编写自己的类/包装器,因为您可能希望更好地控制订阅过程
-
你绝对可以用 Rx 做到这一点,但是当只有一个通知时,通常异步方法更容易。
标签: c# .net linq system.reactive