提案リストが Web サービスから取得された AutoCompleteBox の入力をデバウンスするために Rx を使用する必要があると提案されました。明らかに、キーストロークごとに更新のために遅いクエリを実行したくありませんが、一方で、ユーザーが一時停止した後の遅延が長すぎることも望ましくありません。
こんな感じでやってました
public partial class MainPage : PhoneApplicationPage
{
Timer _timerName;
public MainPage()
{
InitializeComponent();
_timerName = new Timer(QueryForNameSuggestions);
}
void QueryForNameSuggestions(object state)
{
//
}
private void searchtermName_TextChanged(object sender, RoutedEventArgs e)
{
//Each keystroke resets the timer, 500ms after you stop typing it queries
_timerName.Change(500, Timeout.Infinite);
}
}
これは理解しやすく、うまく機能します。キーストロークごとに (再) 0.5 秒の待機が開始され、クエリで最高潮に達します。
Rx で同じことを行う方法はまったくわかりませんが、それが改善される可能性を楽しみにしています。誰かがこれが Rx でどのように行われるかを示し、Rx の方法の何が優れているかを説明してもらえますか?
Rx: すぐに応答するにはどうすればよいですか。また、後続の要求をスロットルするのは近いようですが、AutoCompleteBox の値をポーリングせずに着信キーストロークを検出する方法がわかりません。これは私には改善のようには思えません。