1

提案リストが 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 の値をポーリングせずに着信キーストロークを検出する方法がわかりません。これは私には改善のようには思えません。

4

1 に答える 1