thi*_*elf 3 c# system.reactive rx.net
在 Rx.NET 中使用 C#。有没有办法延长Observable.Timer启动后的持续时间?有没有办法用Join(...)或Expand(...)?我不喜欢处理旧计时器,也不喜欢创建新计时器。
示例:初始持续时间为 5 分钟。但是在计时器完成前 1 分钟,我喜欢将其重置为 5 分钟,再次测量 5 分钟。
var _timerDisposable = Observable.Timer(duration)
.ObserveOn(Scheduler.Default)
.Subscribe((_) => DoSomething());
Run Code Online (Sandbox Code Playgroud)
这类似于@Krzystztof 的回答,但更符合 Rx 的习惯:
var DoSomething = new Action(() => {});
var duration = TimeSpan.FromSeconds(5);
var resetSignal = new Subject<Unit>();
var scheduler = Scheduler.Default;
resetSignal
.Select(_ => Observable.Timer(duration))
.Switch()
.ObserveOn(scheduler)
.Subscribe(_ => DoSomething())
// to reset or start timer:
resetSignal.OnNext(Unit.Default);
Run Code Online (Sandbox Code Playgroud)
解释:
每次resetSignal产生一个值,Timer就会启动一个新的值。接下来,Switch当一个新的 observable 出现时,操作员会自动切换到最新的 observable(在我们的例子中是最新的计时器),有效地忽略旧的。在幕后,Switch干净地将旧订阅处理为先前的 observable(计时器),并订阅新的 observable。
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |