我正在尝试创建一个 IObservable<bool>
,如果在最近5秒内收到UDP消息,则返回true
;如果超时,则返回false
。
目前我的代码如下:
public IObservable<Boolean> GettingUDPMessages(IPEndPoint localEP)
{
var udp = BaseComms.UDPBaseStringListener(localEP)
.Where(msg => msg.Data.Contains("running"))
.Select(s => true);
return Observable
.Timeout(udp, TimeSpan.FromSeconds(5))
.Catch(Observable.Return(false));
}
这样做存在以下问题:
- 一旦返回 false,序列就停止了。 - 我只需要在状态更改时得到 true 或 false。
我可以使用 Subject,但需要小心处理当没有订阅者时要释放 UDPBaseStringListener 可观察对象。
更新:
每次收到 UDP 消息时,我希望它返回 true。如果在过去的 5 秒内没有收到 UDP 消息,则希望它返回 false。