我有一个网络服务,我想在布尔值设置为 true 后立即查询更新,然后每 5 分钟重新检查一次。
这是我目前的观察:
_queryDisposable = Observable
.Interval(TimeSpan.FromMinutes(5))
.ObserveOn(Scheduler.ThreadPool)
.Where(i => IsProcessing) // IsProcessing is the bool value
.Subscribe(GetFeeds, OnError, OnComplete);
这个 observable 将IsProcessing
每 5 分钟检查一次 bool 是真还是假,GetFeeds
如果是真则调用。
我认为获得预期效果的唯一方法是创建IsProcessing
一个属性支持的字段并使用 2 个 observable 进行处理,如下所示:
private bool _isProcessing;
public bool IsProcessing
{
get { return _isProcessing; }
set
{
if (_isProcessing == value)
return;
_isProcessing = value;
if (!value)
{
if(_queryDisposable != null)
_queryDisposable.Dispose();
_queryDisposable = null;
}
else
{
Observable
.Range(0,1)
.ObserveOn(Scheduler.ThreadPool)
.Subscribe(GetFeedsSafe, OnError, OnComplete);
_queryDisposable = Observable
.Interval(TimeSpan.FromMinutes(5))
.ObserveOn(Scheduler.ThreadPool)
.Subscribe(GetFeedsSafe, OnError, OnComplete);
}
}
}
我认为这不是一个非常优雅的解决方案,所以我想知道是否有更好的方法来实现这种效果?