ビューモデルの1つにスロットル動作を実装しようとしています。これはSilverlightアプリケーションですが、特に重要ではないと思います。
次の3つのプロパティを持つクラスについて考えてみます。
- プロパティ1
- プロパティ2
- プロパティ3
これらのプロパティの1つが更新されるたびに、更新が必要です。
private void Refresh()
{
//Call out to the server, do something when it comes back
}
私の目標は次のとおりです。
- 更新が進行中の場合は、サーバーへの呼び出しをキャンセルして、新しいリクエストを発行するのが理想的です。
- プロパティが変更された場合は、追加の変更を待つための小さな時間枠(おそらく0.1秒)を残す必要があります。このように、複数のプロパティが急速に(たとえば、プログラムで)変更された場合でも、サーバーにリクエストをスパム送信することはありません。その0.1秒のウィンドウは、変更のたびにリセットしても問題ありませんが、必須ではありません。
重要な場合は、サーバー呼び出しにChannelFactory実装を使用しています。
これを実現するためにどのようなパターンを使用できますか?これはリアクティブエクステンションが私を助けることができるものですか?
編集:
ポールの答えを正しいものとしてマークする。ReactiveUIは現在silverlight5に対しては機能しませんが、Rxを使用して問題を解決するためのアプローチ/構成手順の概要を明確に示しています。