Comment créer un « Scheduler » pour la méthode « observeOn » ?
-
21-12-2019 - |
Question
J'utilise RxJava dans mon projet Scala et je dois exécuter mon Observable
dans un fil séparé.Je sais que pour y parvenir, je dois appeler observeOn
méthode dessus et passer une instance de rx.lang.scala.Scheduler
comme argument.
Mais comment puis-je créer cette instance ?Je n'ai trouvé aucun moyen apparent d'instancier rx.lang.scala.Scheduler
trait.Par exemple, j'ai ce code :
Observable.from(List(1,2,3)).observeOn(scheduler)
Quelqu'un peut-il donner un exemple de travail scheduler
variable qui fera l'affaire ?
La solution
Un trait n'est pas instanciable.
Vous devez utiliser l'une des sous-classes du trait répertoriées sous « Sous-classes connues » dans le Documentation API.
Autres conseils
Tous les planificateurs sont dans le package
import rx.lang.scala.schedulers._
Pour bloquer les opérations IO, utilisez le planificateur IO
Observable.from(List(1,2,3)).observeOn(IOScheduler())
Pour le travail de calcul, utilisez le planificateur de calcul
Observable.from(List(1,2,3)).observeOn(ComputationScheduler())
À exécuter sur le thread actuel
Observable.from(List(1,2,3)).observeOn(ImmediateScheduler())
Pour exécuter sur un nouveau thread
Observable.from(List(1,2,3)).observeOn(NewThreadScheduler())
Pour que les files d'attente fonctionnent sur le thread actuel à exécuter après celui en cours
Observable.from(List(1,2,3)).observeOn(TrampolineScheduler())
Si vous souhaitez utiliser votre propre pool de threads personnalisé
val threadPoolExecutor = Executors.newFixedThreadPool(2)
val executionContext = ExecutionContext.fromExecutor(threadPoolExecutor)
val customScheduler = ExecutionContextScheduler(executionContext)
Observable.from(List(1,2,3)).observeOn(customScheduler)