我正在編寫一個用戶可以在其中輸入搜索詞的用戶界面,並且列表可以獲得不斷更新的提供建議。節流,但如果它們來得太晚,就會丟棄結果
我的第一個雖然是Rx原始節流閥是一個完美的比賽,但它讓我一半。
建議需要一段時間來獲取,所以我不會在UI線程上異步獲取它們。
問題是,如果用戶再次輸入油門時間間隔,我想放棄/跳過/丟棄結果。
例如:
- 時間開始,並且用戶按下一個鍵:0毫秒
- 節氣門被設置爲100毫秒。
- 獲取需要200ms。
- 在150ms的用戶與油門按下另一個鍵
現在的第一次提取仍將繼續的填充GUI建議列表。 我喜歡學習的是如何取消第一次獲取,因爲它不再相關? 只有第二個按鍵應該觸發對gui的更新。
這裏是我試過
(我用ReactiveUI但Q是約Rx)的
public IEnumerable<usp_getOpdrachtgevers_Result> Results { get; set; } // [Reactive] pu
public SearchOpdrachtgeverVM()
{
this.WhenAnyValue(x => x.FirstName,
x => x.LastName
)
.Throttle(TimeSpan.FromMilliseconds(200))
.Subscribe(async vm => Results = await PopulateGrid());
}
private async Task<IEnumerable<usp_getOpdrachtgevers_Result>> PopulateGrid()
{
return await Task.Run(
() => _opdrachtgeversCache
.Where(x =>
x.vNaam.Contains(FirstName)
&& x.vLastName.Contains(LastName)
)
);
}
對於您建議的所有主題代碼,'WhenAnyValue'方法是ReactiveUI的縮寫。 – Shlomo
Hi @ibebbs。正如Shlomo指出的,我使用ReactiveUI來消除一些管道。通過寫出來,我真的很感激你的答案!有關調度程序的提示也是我將要看的內容。 – buckley
看來,這是一本教科書示例http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html#Switch – buckley