ユーザーが検索語を入力できるUIを作成していて、リストには常に提案候補が表示されます。スロットルが遅すぎると結果が破棄されます
私の最初のことは、Rxの原始的なスロットルは完璧な試合だったが、そこに私の半分を得ることができた。
私はUIスレッドではなく非同期的にそれらを取得するので、提案はフェッチするのに時間がかかります。
問題は、ユーザーがスロットル時間スパンをもう一度タイプした場合、結果を破棄/スキップ/スローすることです。例えば
:
- 開始時刻とユーザがキーを押した:は0ms
- スロットルが100ミリ秒に設定されています。
- フェッチには200msかかります。
- ユーザーがスロットルで今すぐ別のキー
を押し150msの時にフェッチ最初はまだ先に行くAN GUI候補リストに移入されます。 私が学びたいのは、もはや最初のフェッチをそれ以上関連しないように取り消すことができることです。 2番目のキーを押すだけで、guiへの更新が開始されます。ここで
は、私はあなたが正しく何をしたい理解していれば、これは非常に単純な方法で行うことができます
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
こんにちは@bibbs。 Shlomoが指摘したように、私はReactiveUIを使って配管の一部を排除しています。私は本当にそれを書くことによってあなたの答えをありがとう!スケジューラについてのヒントは、私もあまりよく見ていくものです。 – buckley
これはテキストブックの例であるようです。http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html#Switch – buckley