RxSwift筆記 - Schedulers (調度器)

調度器(Schedulers)

調度器(Schedulers)是 RxSwift 實現多線程的核心模塊,它主要用於控制任務在哪個線程或隊列運行.

RxSwift 中的幾種 Scheduler

  • CurrentThreadScheduler:表示當前線程 Scheduler。(默認使用這個)
  • MainScheduler:表示主線程。如果我們需要執行一些和 UI 相關的任務,就需要切換到該 Scheduler 運行。
  • SerialDispatchQueueScheduler:封裝了 GCD 的串行隊列。如果我們需要執行一些串行任務,可以切換到這個 Scheduler 運行。
  • ConcurrentDispatchQueueScheduler:封裝了 GCD 的並行隊列。如果我們需要執行一些併發任務,可以切換到這個 Scheduler 運行。
  • OperationQueueScheduler:封裝了 NSOperationQueue

RxSwift 使用 subscribeOnobserveOn 來實現線程切換

subscribeOn()

  • 決定數據序列的構建函數在哪個 Scheduler 上運行

observeOn()

  • 決定在哪個 Scheduler 上監聽這個數據序列

使用樣例

後臺發起網絡請求,然後解析數據,最後在主線程刷新頁面

使用系統 GCD 來實現

// 現在後臺獲取數據
DispatchQueue.global(qos: .userInitiated).async {
    let data = try? Data(contentsOf: url)
    // 再到主線程顯示結果
    DispatchQueue.main.async {
        self.data = data
    }
}

使用 RxSwit 來實現

let rxData: Observable<Data> = ...

rxData
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInitiated)) // 後臺構建序列
    .observeOn(MainScheduler.instance)  // 主線程監聽並處理序列結果
    .subscribe(onNext: { [weak self] data in
        self?.data = data
    })
    .disposed(by: disposeBag)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章