Chciałbym wprowadzić pewne ograniczające działanie do jednej z moich modeli widoku. Jest to aplikacja silverlight, ale nie sądzę, że jest to szczególnie ważne.Ograniczanie/ustawianie zdarzeń - Rozszerzenia reaktywne?
Rozważmy klasę z trzech właściwości:
- Property1
- Property2
- Property3
Gdy jeden z tych właściwości jest aktualizowana, odświeżenie jest konieczne.
private void Refresh()
{
//Call out to the server, do something when it comes back
}
Moje cele są następujące:
- Jeśli Refresh jest w toku, powinniśmy idealnie zakończyć połączenie z serwerem i wydawać nowe żądanie
- Jeśli właściwość zostanie zmieniona, powinniśmy zostawić trochę czasu (być może 0,1 sekundy), w którym czekamy na dodatkowe zmiany. W ten sposób, jeśli wiele właściwości zostanie szybko zmienionych (na przykład programowo), nie spamujemy serwera za pomocą żądań. Jest OK, aby to 0,1-sekundowe okno było resetowane przy każdej zmianie, ale nie było wymagane.
Jeśli to ma znaczenie, używam implementacji ChannelFactory dla wywołania serwera.
Jakiego rodzaju wzorców można użyć, aby to osiągnąć? Czy jest to coś, co może mi pomóc reaktywne rozszerzenie?
Edit:
Znakowanie odpowiedź Pawła prawidłowe. Podczas, gdy ReactiveUI nie działa obecnie przeciwko silverlight5, wyraźnie określa kroki podejścia/składu do rozwiązania problemu za pomocą Rx.
Rx zdecydowanie popiera to zobaczyć http://rxwiki.wikidot.com/101samples#toc29 - o anulowaniu to - spójrz na CancellationToken z Zadania –