我对使用System.Reactive非常陌生,并想知道我的解决方案是否可以改进。我需要按照前一个事件确定的间隔订阅一系列无限的事件。我在这里看到了使用IObservable.Generate
的其他解决方案,并提出了以下哪些方法有效,但这是不错的做法?
IDisposable updateJob = Observable.Generate(
true,
_ => true,
_ => CheckForUpdate(),
_ => _,
_ => NextCheck()).Subscribe();
NextCheck()
返回TimeSpan
,CheckForUpdate()
返回bool
并执行事件处理。
答案 0 :(得分:1)
一方面,如果它有效...... 耸肩。另一方面......
Observable.Generate
应该类似于一个内置可选时间间隔的for循环。所以如果你想迭代整数1-10,在每次迭代之间暂停i * 100毫秒,你会这样做:
var forLoop = Observable.Generate(
1,
i => i <= 10,
i => i + 1,
i => i,
i => TimeSpan.FromMilliseconds(i * 100)
)
关于这个的好处是Rx为你管理迭代器状态,你可以看到它。您也可以通过以下方式实现相同的效果:
var opaqueForLoop = Observable.Generate(
GetFirstValue(),
_ => CheckIfDone(),
_ => GetNextValue(),
i => SaveCurrentValue(i),
_ => GetNextTimespan()
)
但你必须实施这些方法,并且你有一些不必要的意大利面。
您的代码看起来更像后者而不是前者。可能有必要,根据你的问题,我真的不知道。
您可以清楚地做的一件事是将迭代器类型替换为Unit
,将值替换为Unit.Default
。由于您根本不使用该值,因此也可以使用明确无用的值来明确这一点。