【发布时间】:2016-02-03 15:54:06
【问题描述】:
我遇到了一个问题,我想在谓词为真时订阅可观察流,并在谓词为假时停止订阅。当谓词在未来某个时间再次为真时,它应该重新订阅可观察流。
用例:
如果我无法将日志实体插入数据库,它应该取消订阅流,并且当数据库重新运行时,它应该自动订阅流(基于属性IsSubscribed)并开始插入数据。
我自己的尝试:
我已经尝试了以下 没有工作:
var groups = from dataItem in items.SelectMany(o => o.GroupBy(i => i.EntityType))
where dataItem.Any()
select new {Type = dataItem.Key, List = dataItem.Select(o => o)};
groups
.TakeWhile(o => IsSubscribed)
.SubscribeOn(_scheduler)
.Repeat()
.Subscribe(o => Insert(o.Type, o.List));
基于属性IsSubscribed,我想流式订阅和取消订阅。当TakeWhile 为真时,OnCompleted 被调用,而当Subscribe 之后将无法工作。 旁注:这是一个冷的可观察流
问题:
如何创建一个可观察的流,我可以在其中订阅和取消订阅任意多次(有点像 C# 中的事件处理程序)
感谢您提前提供帮助
【问题讨论】:
-
将
TakeWhile替换为Where,并删除Repeat。 -
如果我这样做,当
Where子句为假时,它不会只是丢弃日志实体吗? -
这就是我从你那里得到的要求......这就像你要取消订阅 Observable 一样。
-
如果我取消订阅一个冷的可观察流,整个流将在取消订阅时停止。我希望将来能够再次重新订阅该流。
-
但是如果你订阅一个冷的 Observable,你会从流的开始接收到所有的事件...
标签: c# system.reactive reactive-programming