Domanda

Dato un comportamento, qual è la differenza pratica tra chiamare tutte queste diverse funzioni?

  • Primo()
  • Scorso()
  • UltimeValue ()
  • MostrecentValue ()
  • NextValue ()
  • Separare()
  • Prendi (1)

Supponendo che lo capisca bene, dovrebbero fare tutti sulla stessa cosa, dati i comportamenti.

In tal caso, allora quale chiamata è la più appropriata (con il quale intendo: quale meglio comunica il mio intento)? Prima o singolo forse?

In caso contrario, quali sono le differenze pratiche?

È stato utile?

Soluzione

Primo, ultimo e singolo stanno bloccando; Si consiglia di utilizzare invece (1), quindi ottieni un back iobservable. Quando si incazzano operatori di query si consiglia di evitare prima, ultimo e singolo perché esci dalla sicurezza della monade ... vale a dire che hai effetti collaterali bloccanti. Vedere http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangerous-yet-extremely-useful.aspx Per ulteriori informazioni al riguardo.

MostrecentValue e UltimeValue sono stati rimossi dall'ultima versione di RX perché stanno bloccando anche, quindi gli unici operatori di blocco rimasti sono i primi, gli ultimi e i singoli (e le varianti XXXORDEFAULT), secondo le ultime note di rilascio.

Mostrecent restituirà l'ultimo valore campionato, tutte le volte che lo chiami (e ci vuole un valore iniziale per garantire che non aspetterà mai), cioè "senza consumo", mentre gli ultimi aspetteranno che un valore arriverà e poi restituirà "con il consumo" - Cioè, se chiami di nuovo l'ultimo, non restituirà lo stesso valore dell'ultima chiamata, aspetterà fino all'arrivo del valore successivo, se mai.

Altri suggerimenti

Grazie @Richardhein per la grande risposta.

I metodi di estensione bloccante dovrebbero davvero essere spostati nel proprio spazio dei nomi, quindi lo sviluppatore deve scegliere specificamente di includerli per un progetto (o in particolare un file CS). Aggiungi una tonnellata di complessità con RX e usando accidentalmente un metodo di blocco che stai fondamentalmente trasformando a Ilist/Ienumerable.

Penso che questo sia l'errore più grande che il team RX ha fatto, IOW penso includendo questi per impostazione predefinita hanno perso la "fossa del successo" con RX. Risolvi questo e chiamerei Rx l'API di scelta quando vado oltre il singolo thread + asincring in C# (cioè perché .NET è più potente di Say Nodejs).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top