【发布时间】:2014-09-10 20:21:06
【问题描述】:
不确定我的问题的标题,但希望我能解释我想要做什么。
我想要一个定时器来将一个值注入到一个序列中,但是当观察到一个特定的值时。 我希望在序列中输入任何其他值时取消计时器。
public enum State
{
Connected,
Disconnected,
DisconnectedRetryTimeout
}
var stateSubject = new Subject<State>();
var connectionStream = stateSubject.AsObservable();
var disconnectTimer =
Observable.Return(State.DisconnectedRetryTimeout)
.Delay(TimeSpan.FromSeconds(30))
.Concat(Observable.Never<State>());
var disconnectSignal =
disconnectedTimer
.TakeUntil(connectionStream.Where(s => s == State.Connected))
.Repeat();
var statusObservable =
Observable.Merge(connectionStream, disconnectSignal)
.DistinctUntilChanged();
因此,当流中没有任何内容(即新的)时,没有计时器。 当 Connected|DisconnectedRetryTimeout 不添加计时器。 添加断开连接时,我希望计时器启动 如果在计时器触发之前已连接在流中,我希望取消计时器 Timer 应该只触发一次,直到再次收到 Disconnected。
对 RX 很陌生,对此没有什么想法。
非常感谢任何帮助。
【问题讨论】:
标签: c# system.reactive