Rx schedulers
At the beginning of this chapter, we observed that different Observable
objects emit events on different threads. A synchronous Observable
object emits on the caller thread when subscribe
gets invoked. The Observable.timer
object emits events asynchronously on threads internally used by Rx. Similarly, events in Observable
objects created from Future
objects are emitted on ExecutionContext
threads. What if we want to use an existing Observable
object to create another Observable
object bound to a specific thread?
To encapsulate the choice of the thread on which an Observable
object should emit events, Rx defines a special class called Scheduler
. A Scheduler
class is similar to the Executor
and ExecutionContext
interfaces we saw in Chapter 3, Traditional Building Blocks of Concurrency. The Observable
objects come with a combinator called observeOn
. This combinator returns a new Observable
object that emits events using the specified Scheduler
class. In the following program, we...