Wie erstelle ich einen `Scheduler` für die `observeOn`-Methode?
-
21-12-2019 - |
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?
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)