Sto cercando di implementare alcuni comportamenti di limitazione in uno dei miei viewmodels. È un'applicazione Silverlight, tuttavia non penso che sia particolarmente importante.Event throttling/accodamento - Estensioni reattive?
consideri una classe con tre proprietà:
- Property1
- Property2
- Property3
Ogni volta che una di queste proprietà viene aggiornato, un aggiornamento è necessario.
private void Refresh()
{
//Call out to the server, do something when it comes back
}
I miei obiettivi sono i seguenti:
- Se un aggiornamento è in corso, si dovrebbe idealmente annullare la chiamata al server, ed emettere una nuova richiesta
- Se una proprietà viene modificata, dovremmo lasciare una piccola finestra temporale (forse 0,1 secondi) dove aspettiamo ulteriori cambiamenti. In questo modo, se vengono modificate più proprietà rapidamente (ad esempio, a livello di codice), non inviamo spam al server con richieste. Va bene che la finestra da 0,1 secondi si ripristini a ogni modifica, ma non è necessaria.
Se è importante, sto utilizzando un'implementazione ChannelFactory per la chiamata al server.
Che tipo di motivi posso utilizzare per realizzare questo? È qualcosa con cui le estensioni reattive possono aiutarmi?
Edit:
Marcatura risposta di Paolo come corrette. Mentre ReactiveUI non funziona attualmente contro silverlight5, delinea chiaramente le fasi di approccio/composizione per risolvere il problema usando Rx.
Rx sostiene sicuramente questa, vedere http://rxwiki.wikidot.com/101samples#toc29 - circa annullarlo - dare un'occhiata a CancellationToken da Attività –