我有一個webservice,我想在布爾值設置爲true後立即查詢更新,然後每5分鐘重新檢查一次。無效擴展,立即觸發OnNext,然後在一段時間內觸發
這是我觀察到的電流:
_queryDisposable = Observable
.Interval(TimeSpan.FromMinutes(5))
.ObserveOn(Scheduler.ThreadPool)
.Where(i => IsProcessing) // IsProcessing is the bool value
.Subscribe(GetFeeds, OnError, OnComplete);
這可觀察到的將檢查IsProcessing
布爾是真的還是假的,每5分鐘,然後調用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);
}
}
}
我不認爲這是一個非常優雅解決方案,所以我想知道是否有更好的方法來達到這種效果?
大聲笑,有效的點!我試圖看看是否有一種純粹的Rx方式來執行諸如「Fire,然後在TimeSpan間隔上觸發」之類的操作。 –
@joe_coolish找到了一個示例,請參閱編輯。 –
標準做法是在訂閱之前將'ObserveOn'作爲最後一個操作符,除非其中一個後面的操作符必須在特定的調度程序上運行。 –