バックグラウンドでRxSwiftを実行するにはどうすればよいですか?

アンドレイ・イサエフ

テーブル行の選択時にバックグラウンドで複雑な計算を実行しようとしていますが、UIがフリーズします。私のコードを見て、何が悪いのか教えてください。

tableView.rx
    .modelSelected(Sring.self)
    .flatMap { item -> Observable<String> in
        
        for _ in 1...2_500 {
            for _ in 1...1_000 {
                
            }
        }
        return Observable.just("Hello world!")

    }
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .observeOn(MainScheduler.instance)
    .retry()
    .subscribe(onNext: { value in
        print(value)
    })
    .disposed(by: bag)
ダニエルT。

このコードで最初に理解subscribeOnすることは、値が発行されるスレッドではなく、オブザーバブルのイベントジェネレーターが呼び出されるスレッド決定することです。それが加入しています同じスレッド上のソース観察可能発するが、その後、あなたのコードは、働いていた場合(たとえば、あなたが使用していた場合Observable.just(_:)。しかしmodelSelected 発するにかかわらず、それは。に加入したスレッドどのように、メインスレッド上でflatMap、オペレータは上の閉鎖を呼び出しますソースが発行したスレッドで、メインスレッドにもあります。

これらすべての結果として、を呼び出すことはめったに役に立ちませんsubscribeOn(_:)それが実際にあなたが期待することをするのは、究極のソース(最も上流にあるもの)のObservableのジェネレーターが同期のブロッキング関数である場合だけです。(これはそうではありませんtableView.rx.modelSelected(String.self)

この場合に必要なのは、次のようなものです。

tableView.rx.modelSelected(String.self)
    .observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .flatMap { item -> Observable<String> in
        sleep(3)
        return Observable.just("Hello world!")
    }
    .retry()
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { value in
        print(value)
    })
    .disposed(by: bag)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックグラウンド ジョブを実行するにはどうすればよいですか?

分類Dev

Pythonでgtkウィンドウを作成し、バックグラウンドでコードを実行するにはどうすればよいですか?

分類Dev

XサーバーをWindowsのバックグラウンドで実行するように設定するにはどうすればよいですか?

分類Dev

常にバックグラウンドで実行されるようにAndroidアプリを作成するにはどうすればよいですか?

分類Dev

アンパサンド(&)なしでバックグラウンドでコマンドを実行するにはどうすればよいですか?

分類Dev

セレンWebドライバーをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

Firefoxをクロムのようにバックグラウンドで実行するにはどうすればよいですか?

分類Dev

バックグラウンドでフラッターでタスクを実行するにはどうすればよいですか?

分類Dev

Windowsコマンドラインをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

グラフィカルアプリをバックグラウンドモードで実行するにはどうすればよいですか?

分類Dev

Macのバックグラウンドで実行されているPythonスクリプトを中断するにはどうすればよいですか?

分類Dev

単一行のbashで複数のバックグラウンドコマンドを実行するにはどうすればよいですか?

分類Dev

GeditコマンドとSublコマンドをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

GeditコマンドとSublコマンドをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

バックグラウンドでループが実行されている間にbashを停止するにはどうすればよいですか?

分類Dev

1日の特定の時間にバックグラウンドでプログラムを実行するにはどうすればよいですか?

分類Dev

C-execを使用してバックグラウンドでプログラムを実行するにはどうすればよいですか?

分類Dev

必須ではない計算をバックグラウンドで実行するにはどうすればよいですか?

分類Dev

バックグラウンドで複数のコマンドを一緒に実行するにはどうすればよいですか?

分類Dev

バックグラウンドで複数のコマンドを一緒に実行するにはどうすればよいですか?

分類Dev

サーバーでTypescriptファイルをバックグラウンドで実行するにはどうすればよいですか?

分類Dev

Bash: `read`に干渉することなく、バックグラウンドで` sudo -n true`を実行するにはどうすればよいですか?

分類Dev

Perlスクリプトの実行をバックグラウンドで続行するにはどうすればよいですか?

分類Dev

バックグラウンドスレッドでLiveData変換を実行するにはどうすればよいですか?

分類Dev

バックグラウンドスレッドでListenableWorker作業を実行するにはどうすればよいですか?

分類Dev

キューとバックグラウンドで非同期コマンドを実行するにはどうすればよいですか?

分類Dev

遅延してバックグラウンドでコマンドを実行するにはどうすればよいですか?

分類Dev

コマンドをバックグラウンドで1つずつ実行するにはどうすればよいですか?

分類Dev

SwiftでiOSアプリをバックグラウンドで永久に実行するにはどうすればよいですか?

Related 関連記事

  1. 1

    バックグラウンド ジョブを実行するにはどうすればよいですか?

  2. 2

    Pythonでgtkウィンドウを作成し、バックグラウンドでコードを実行するにはどうすればよいですか?

  3. 3

    XサーバーをWindowsのバックグラウンドで実行するように設定するにはどうすればよいですか?

  4. 4

    常にバックグラウンドで実行されるようにAndroidアプリを作成するにはどうすればよいですか?

  5. 5

    アンパサンド(&)なしでバックグラウンドでコマンドを実行するにはどうすればよいですか?

  6. 6

    セレンWebドライバーをバックグラウンドで実行するにはどうすればよいですか?

  7. 7

    Firefoxをクロムのようにバックグラウンドで実行するにはどうすればよいですか?

  8. 8

    バックグラウンドでフラッターでタスクを実行するにはどうすればよいですか?

  9. 9

    Windowsコマンドラインをバックグラウンドで実行するにはどうすればよいですか?

  10. 10

    グラフィカルアプリをバックグラウンドモードで実行するにはどうすればよいですか?

  11. 11

    Macのバックグラウンドで実行されているPythonスクリプトを中断するにはどうすればよいですか?

  12. 12

    単一行のbashで複数のバックグラウンドコマンドを実行するにはどうすればよいですか?

  13. 13

    GeditコマンドとSublコマンドをバックグラウンドで実行するにはどうすればよいですか?

  14. 14

    GeditコマンドとSublコマンドをバックグラウンドで実行するにはどうすればよいですか?

  15. 15

    バックグラウンドでループが実行されている間にbashを停止するにはどうすればよいですか?

  16. 16

    1日の特定の時間にバックグラウンドでプログラムを実行するにはどうすればよいですか?

  17. 17

    C-execを使用してバックグラウンドでプログラムを実行するにはどうすればよいですか?

  18. 18

    必須ではない計算をバックグラウンドで実行するにはどうすればよいですか?

  19. 19

    バックグラウンドで複数のコマンドを一緒に実行するにはどうすればよいですか?

  20. 20

    バックグラウンドで複数のコマンドを一緒に実行するにはどうすればよいですか?

  21. 21

    サーバーでTypescriptファイルをバックグラウンドで実行するにはどうすればよいですか?

  22. 22

    Bash: `read`に干渉することなく、バックグラウンドで` sudo -n true`を実行するにはどうすればよいですか?

  23. 23

    Perlスクリプトの実行をバックグラウンドで続行するにはどうすればよいですか?

  24. 24

    バックグラウンドスレッドでLiveData変換を実行するにはどうすればよいですか?

  25. 25

    バックグラウンドスレッドでListenableWorker作業を実行するにはどうすればよいですか?

  26. 26

    キューとバックグラウンドで非同期コマンドを実行するにはどうすればよいですか?

  27. 27

    遅延してバックグラウンドでコマンドを実行するにはどうすればよいですか?

  28. 28

    コマンドをバックグラウンドで1つずつ実行するにはどうすればよいですか?

  29. 29

    SwiftでiOSアプリをバックグラウンドで永久に実行するにはどうすればよいですか?

ホットタグ

アーカイブ