Question

I'm using RxJava in my Scala project and I need to execute my Observable in a separate thread. I know in order to achieve this I need to call observeOn method on it and pass an instance of rx.lang.scala.Scheduler as an argument.

But how can I create that instance? I did not find any apparent ways of instantiating of rx.lang.scala.Scheduler trait. For example, I have this code:

Observable.from(List(1,2,3)).observeOn(scheduler)

Can someone provide an example of working scheduler variable that will do the trick?

Was it helpful?

Solution

A trait is not instantiable.

You need to use one of the subclasses of the trait listed under "Known Subclasses" in the API documentation.

OTHER TIPS

All schedulers are in the package

import rx.lang.scala.schedulers._

For blocking IO operations, use IO scheduler

Observable.from(List(1,2,3)).observeOn(IOScheduler())

For computational work, use computation scheduler

Observable.from(List(1,2,3)).observeOn(ComputationScheduler())

To execute on the current thread

Observable.from(List(1,2,3)).observeOn(ImmediateScheduler())

To execute on a new thread

Observable.from(List(1,2,3)).observeOn(NewThreadScheduler())

To queues work on the current thread to be executed after the current one

Observable.from(List(1,2,3)).observeOn(TrampolineScheduler())

If you want to use your own custom thread pool

val threadPoolExecutor = Executors.newFixedThreadPool(2)
val executionContext = ExecutionContext.fromExecutor(threadPoolExecutor)
val customScheduler = ExecutionContextScheduler(executionContext)
Observable.from(List(1,2,3)).observeOn(customScheduler)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top