Frage

Ich verwende RxJava in meinem Scala-Projekt und muss mein ausführen Observable in einem separaten Thread.Ich weiß, um das zu erreichen, muss ich anrufen observeOn methode darauf und übergeben Sie eine Instanz von rx.lang.scala.Scheduler als Argument.

Aber wie kann ich diese Instanz erstellen?Ich habe keine offensichtlichen Wege gefunden, um zu instanziieren rx.lang.scala.Scheduler Merkmal.Zum Beispiel habe ich diesen Code:

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

Kann jemand ein Beispiel für die Arbeit geben scheduler variable, die den Trick macht?

War es hilfreich?

Lösung

Ein Merkmal ist nicht instanziierbar.

Sie müssen eine der Unterklassen des Merkmals verwenden, die unter "Bekannte Unterklassen" in der API-Dokumentation.

Andere Tipps

Alle Scheduler sind im Paket enthalten

import rx.lang.scala.schedulers._

Verwenden Sie zum Blockieren von E / A-Vorgängen den E / A-Planer

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

Verwenden Sie für Rechenarbeiten den Berechnungsplaner

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

So führen Sie den aktuellen Thread aus

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

So führen Sie einen neuen Thread aus

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

Warteschlangen arbeiten mit dem aktuellen Thread, der nach dem aktuellen ausgeführt werden soll

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

Wenn Sie Ihren eigenen benutzerdefinierten Thread-Pool verwenden möchten

val threadPoolExecutor = Executors.newFixedThreadPool(2)
val executionContext = ExecutionContext.fromExecutor(threadPoolExecutor)
val customScheduler = ExecutionContextScheduler(executionContext)
Observable.from(List(1,2,3)).observeOn(customScheduler)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top