【发布时间】:2012-06-25 14:22:32
【问题描述】:
我有一个网络服务,我想在布尔值设置为 true 后立即查询更新,然后每 5 分钟重新检查一次。
这是我当前的 observable:
_queryDisposable = Observable
.Interval(TimeSpan.FromMinutes(5))
.ObserveOn(Scheduler.ThreadPool)
.Where(i => IsProcessing) // IsProcessing is the bool value
.Subscribe(GetFeeds, OnError, OnComplete);
此 observable 将每 5 分钟检查一次 IsProcessing 布尔值是真还是假,如果为真,则调用 GetFeeds。
我认为获得预期效果的唯一方法是使 IsProcessing 成为属性支持的字段并使用 2 个可观察对象进行处理,如下所示:
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);
}
}
}
我不认为这是一个非常优雅的解决方案,所以我想知道是否有更好的方法来实现这种效果?
【问题讨论】:
标签: c# system.reactive observable