簡體   English   中英

將多個 observables 連接到一個源

[英]Concat multiple observables to one source

我有很多發出不同類型的網絡調用,例如字符串、整數等。

我試圖讓它們平行。

在官方 rxjava 文檔中,我們可以閱讀:

Flowable.range(1, 10)
  .parallel()
  .runOn(Schedulers.computation())
  .map(v -> v * v)
  .sequential()
  .blockingSubscribe(System.out::println);

這個例子很簡單,因為我們將所有類型都設為 Int。 但是,如果我們有不同的類型,例如字符串、boolean、Int,該怎么辦?

  • 來自這 5 的每個呼叫都是獨立的
  • 這5個調用的組將在一個方法中,並且該方法將由其他隨機方法調用。
  • 我們可以假設,5 次調用的結果將是第一次調用的類型 -> string

結合 Observables

使用多個源 Observable 來創建單個 Observable 的操作符

  • And/Then/When — 通過 Pattern 和 Plan 中介組合兩個或多個 Observable 發出的項目集

  • CombineLatest — 當兩個 Observable 中的任何一個發出項目時,通過指定的 function 組合每個 Observable 發出的最新項目,並根據 function 的結果發射項目

  • Join — 結合兩個 Observable 發出的項

  • 合並——通過合並它們的發射將多個 Observable 合並為一個

  • StartWith — 在開始從源 Observable 發射項目之前發射指定的項目序列

  • Switch — 將發出 Observables 的 Observable 轉換為單個 Observable,該 Observable 發出由最近發出的那些 Observables 發出的項目

  • Zip — 通過指定的 function 將多個 Observable 的發射組合在一起,並根據此 function 的結果為每個組合發射單個項目

我認為在您的情況下,您可以使用zipcombineLatest

閱讀本文檔http://reactivex.io/documentation/operators.html#combining

我想你也需要知道

RxJava 調度器簡介。

  • Schedulers.io() - 這用於執行非 CPU 密集型操作,例如進行網絡調用、讀取磁盤/文件、數據庫操作等,它維護一個線程池。

  • Schedulers.newThread() - 使用它,每次調度任務時都會創建一個新線程。 通常建議不要使用調度程序,除非有一個非常長時間運行的操作。 通過 newThread() 創建的線程不會被重用。

  • Schedulers.computation() - 此調度可用於執行 CPU 密集型操作,例如處理大量數據、bitmap 處理等,使用此調度器創建的線程數完全取決於可用的 CPU 內核數。

  • Schedulers.single() - 此調度程序將按添加的順序執行所有任務。 這可以在需要順序執行時使用。

  • Schedulers.immediate() - 此調度程序通過阻塞主線程以同步方式立即執行任務。

  • Schedulers.trampoline() - 它以先進先出的方式執行任務。 通過將后台線程的數量限制為1個,所有的計划任務將被一個一個地執行。

  • Schedulers.from() - 這允許我們通過限制要創建的線程數從執行程序創建調度程序。 當線程池被占用時,任務會排隊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM