2014-12-05 2 views
8

Recentemente ho avuto discussioni con i colleghi sull'uso o quandoReady o .futureValue di ScalaFutures in ScalaTest rispetto a Await.result nei test. Oltre alla leggibilità, all'uniformità nella configurazione (timeout) e all'ambito del risultato quando si utilizza whenReady, esistono altri vantaggi evidenti dell'utilizzo dei metodi ScalaFutures su Await.result?Vantaggi dell'uso di ScalaFutures da ScalaTest vs. Await.result

Ho notato che ScalaFutures utilizza una tecnica di "polling" invece di bloccare come Await, ma qualcuno può approfondire i vantaggi?

+0

Hai trovato altro su questo? Mi stavo chiedendo anche quali sono i vantaggi/svantaggi di ogni – gnorsilva

+0

Non proprio, penso che sia principalmente quello che ho detto, la consistenza nella configurazione dei timeout e l'scope variabile quando si utilizza whenReady sono i più utili per me. – jgagnon1

risposta

0

Quando si utilizza Await.result si sta bloccando il thread chiamante. L'effetto di ciò sarebbe più evidente se si eseguivano i test in modalità a thread singolo (ad esempio con un'impostazione SBT come parallelExecution in Test := false).

Il polling eseguito da ScalaFutures viene eseguito (afaik) tramite uno scheduler; quindi, non blocca alcun thread. Di conseguenza, potresti avere un numero di test in esecuzione che superano di gran lunga i Thread disponibili su qualsiasi ExecutionContext in cui i test sono effettivamente eseguiti.

+0

L'implementazione predefinita di 'futureValue' utilizza Thread.sleep per un intervallo specificato, che blocca il thread. –