Kotlinコルーチンがこのコードをブロックするのはなぜですか?

グリゴリー・ユルコフ:

このコードがHello Worldを出力しないのはなぜですか?

runBlocking(Dispatchers.Main) {
    launch {
        delay(1)
        println("Hello world")
    }
}

しかし、これは印刷されます

runBlocking {
    launch {
        delay(1)
        println("Hello world")
    }
}
パウェル:

最初に見たものから、完全にアプリがフリーズします(ボタンクリックリスナー内で使用した場合)。

問題はあなたがデッドロックを引き起こしていることです:

  1. Dispatchers.Main コルーチンをメインアプリケーションルーパーにポスト(ディスパッチ)することで機能します。
  2. runBlocking メインアプリケーションスレッドをブロックします
  3. それrunBlockingが終了するのを待っているので、メインルーパーは投稿されたコルーチンを実行することは決してありません

Dispatchers.Main.immediateベースディスパッチャーの少しスマートなバージョンである代わりに使用することで、「問題」をわずかに軽減できます。メインルーパーで既に実行されていてインプレースで実行されている場合、コルーティンはメインルーパーにポストされません。

これにより、launchブロックを実行できますが、delayコルーチンを再度ポストして、メインルーパーを続行し、別のデッドロックを引き起こします。

2番目のコードサンプルは、そこで実行されているコルーチンが(runBlockingそれを除いて)メインスレッドと相互作用しないため、問題はありません

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

このマルチプロセッシングコードが失敗するのはなぜですか?

分類Dev

このテンソルフロー コードがクラッシュするのはなぜですか?

分類Dev

チャネルを閉じずにコードがデッドロックするのはなぜですか?

分類Dev

このコードキャッチブロックが実行されないのはなぜですか?

分類Dev

kotlinコルーチンはIOのスレッドを終了するまでブロックしますか?

分類Dev

なぜこのゴルーチンはブロックするのですか?

分類Dev

コレクションビューがこのコードでセンターカルーセルをロードするのはなぜですか?

分類Dev

これらのコードブロックの動作が異なるのはなぜですか?

分類Dev

ジェネリックスを含むこのKotlinコードがTypeMismatchコンパイラエラーを生成するのはなぜですか?

分類Dev

このコードブロックが空白になるのはなぜですか?

分類Dev

goブロックを使用したこのclojureコードが機能しないのはなぜですか?

分類Dev

hasattrが@propertyデコレータコードブロックを実行するのはなぜですか

分類Dev

このコードが自動マッピング例外をスローするのはなぜですか?

分類Dev

このGoコードがブロックされているのはなぜですか?

分類Dev

文字列が母音で始まるかどうかをチェックするコードがコンパイルされないのはなぜですか?

分類Dev

Webフォームのチェックボックスがコントロールループコードから見えないのはなぜですか?

分類Dev

次のコードブロックがfalseを返す必要があるのはなぜですか?

分類Dev

このコンソールアプリの非同期待機パターンがデッドロックを引き起こしたのはなぜですか?

分類Dev

このコードにゼロによるコンパイル時の警告や実行時のクラッシュがないのはなぜですか?

分類Dev

この再帰的な正規表現がコードブロック全体をキャプチャしないのはなぜですか?

分類Dev

このコードがNullPointerExceptionをスローするのはなぜですか?

分類Dev

このコードがNullPointerExceptionをスローするのはなぜですか?

分類Dev

このコードが例外をスローするのはなぜですか

分類Dev

このコードが MalformedURLException をスローするのはなぜですか?

分類Dev

このコードがチェックボックスを非表示にしないのはなぜですか?

分類Dev

致命的なエラーがあるのはなぜですか:すべてのゴルーチンがスリープしています-デッドロック!このコードでは?

分類Dev

このGolangコードでデッドロックが発生するのはなぜですか?

分類Dev

このC#コードがプロセスをクラッシュさせるのはなぜですか?

分類Dev

WebGLがGLSLコードブロックの文字列表現を使用するのはなぜですか?

Related 関連記事

  1. 1

    このマルチプロセッシングコードが失敗するのはなぜですか?

  2. 2

    このテンソルフロー コードがクラッシュするのはなぜですか?

  3. 3

    チャネルを閉じずにコードがデッドロックするのはなぜですか?

  4. 4

    このコードキャッチブロックが実行されないのはなぜですか?

  5. 5

    kotlinコルーチンはIOのスレッドを終了するまでブロックしますか?

  6. 6

    なぜこのゴルーチンはブロックするのですか?

  7. 7

    コレクションビューがこのコードでセンターカルーセルをロードするのはなぜですか?

  8. 8

    これらのコードブロックの動作が異なるのはなぜですか?

  9. 9

    ジェネリックスを含むこのKotlinコードがTypeMismatchコンパイラエラーを生成するのはなぜですか?

  10. 10

    このコードブロックが空白になるのはなぜですか?

  11. 11

    goブロックを使用したこのclojureコードが機能しないのはなぜですか?

  12. 12

    hasattrが@propertyデコレータコードブロックを実行するのはなぜですか

  13. 13

    このコードが自動マッピング例外をスローするのはなぜですか?

  14. 14

    このGoコードがブロックされているのはなぜですか?

  15. 15

    文字列が母音で始まるかどうかをチェックするコードがコンパイルされないのはなぜですか?

  16. 16

    Webフォームのチェックボックスがコントロールループコードから見えないのはなぜですか?

  17. 17

    次のコードブロックがfalseを返す必要があるのはなぜですか?

  18. 18

    このコンソールアプリの非同期待機パターンがデッドロックを引き起こしたのはなぜですか?

  19. 19

    このコードにゼロによるコンパイル時の警告や実行時のクラッシュがないのはなぜですか?

  20. 20

    この再帰的な正規表現がコードブロック全体をキャプチャしないのはなぜですか?

  21. 21

    このコードがNullPointerExceptionをスローするのはなぜですか?

  22. 22

    このコードがNullPointerExceptionをスローするのはなぜですか?

  23. 23

    このコードが例外をスローするのはなぜですか

  24. 24

    このコードが MalformedURLException をスローするのはなぜですか?

  25. 25

    このコードがチェックボックスを非表示にしないのはなぜですか?

  26. 26

    致命的なエラーがあるのはなぜですか:すべてのゴルーチンがスリープしています-デッドロック!このコードでは?

  27. 27

    このGolangコードでデッドロックが発生するのはなぜですか?

  28. 28

    このC#コードがプロセスをクラッシュさせるのはなぜですか?

  29. 29

    WebGLがGLSLコードブロックの文字列表現を使用するのはなぜですか?

ホットタグ

アーカイブ