Kotlin は CoroutineScope と非同期でコルーチンを開始し、結果が返されるのを待ちます

Kotlin は CoroutineScope と非同期でコルーチンを開始し、結果が返されるのを待ちます

例えば:

import kotlinx.coroutines.*

object MyCoroutineScope {
    private val coroutineContext = Job() + Dispatchers.Default + CoroutineName("my_context")
    val coroutineScope = CoroutineScope(coroutineContext)
}

suspend fun demo(): String {
    val job = MyCoroutineScope.coroutineScope.async(Dispatchers.Default) {
        repeat(3) {
            println(it)
        }

        "zhangphil"
    }

    return job.await()
}

fun main(args: Array<String>) {
    runBlocking {
        launch {
            var ret = demo()
            println(ret)
        }
    }
}

出力:

0
1
2
ジャンフィル

kotlin coroutineScope_zhangphil のブログ - CSDN ブログcoroutineScope は独立したコルーチン スコープを作成し、開始されたすべてのコルーチンが完了するまで終了しません。runBlocking は coroutineScope と非常に似ており、どちらも、同じスコープのすべての内部コルーチンが終了するまで待ってから、それ自体を終了する必要があります。2 つの主な違いは、runBlocking は現在のスレッドをブロックしますが、coroutineScope はブロックしません。coroutineScope は、他のコルーチンが使用できるように基礎となるスレッドを一時停止して解放します。kotlin コルーチンコルーチンスコープ。https://blog.csdn.net/zhangphil/article/details/129265638

Kotlin コルーチンの同時実行性/並列およびシリアルの切り替え、CoroutineScope および await_zhangphil のブログ - CSDN ブログrunBlocking は、時間のかかる操作を実行するために 3 つのコルーチンを内部的に開始しました。出力から、3 つのコルーチンが相互に並行して実行され、runBlocking は 3 つの終了まで待機することがわかります。コルーチンが実行された後、出力結果には明確なシーケンスがあります。一般的なプログラミング手法、たとえば Android では、関数がメインスレッドに実装されているとしますが、この関数は時間のかかる操作であり、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作のために、マネージ関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージ関数を設計できます。結果 1-a: 5 - tid: 22。結果 1-b: 5 - tid: 24。結果 2-a: 9 - tid: 22。https://blog.csdn.net/zhangphil/article/details/130794990

kotlin コルーチン async と await_zhangphil のブログ - CSDN ブログrunBlocking は、時間のかかる操作を行うために内部的に 3 つのコルーチンを開始します。出力から、3 つのコルーチンが同時に実行されていることがわかります。RunBlocking は、3 つのコルーチンの実行が完了するまで待機します。出力結果には明確な順序があります。一般的なプログラミング手法、たとえば Android では、関数がメインスレッドに実装されているとしますが、この関数は時間のかかる操作であり、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作のために、マネージド関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージド関数を設計できます。結果 1-a: 5 - tid: 22。結果 1-b: 5 - tid: 24。結果 2-a: 9 - tid: 22。https://blog.csdn.net/zhangphil/article/details/129268399

kotlin コルーチン GlobalScope.launch starting_zhangphil のブログ - CSDN ブログ コンソールに出力はありません. kotlin コルーチンは、スレッドをブロックせずに起動時にコルーチンを開始します. メインの main 関数はすぐに実行され、終了しますが、この時点ではスレッドが開始されましたfor ループはまだ実行されておらず、メインのメインスレッドが終了する (システムが破壊される) ため、出力は表示されません。要約すると、GlobalScope によって開始されるコルーチンはデーモン スレッドと同等であり、JVM の実行とプログラムの終了を妨げることはありません。GlobalScope.launch はトップレベルのコルーチンを作成します。非常に軽量ですが、実行時にメモリ リソースを消費し、アプリケーション全体の終了が停止するまで実行できます。これにより、メモリ リークが発生する可能性があります。GlobalScope の使用には注意してください。https://blog.csdn.net/zhangphil/article/details/129250518

Kotlin コルーチン、スレッド切り替え、関数メソッドtrustment_zhangphil のブログ - CSDN ブログrunBlocking は時間のかかる操作を実行するために 3 つのコルーチンを内部的に開始します。出力から、3 つのコルーチンが相互に並行して実行されていることがわかります。runBlocking は 3 つのコルーチンが終了するまで待機します。実行が完了し、出力結果には明確な順序があります。一般的なプログラミング手法、たとえば Android では、関数がメインスレッドに実装されているとしますが、この関数は時間のかかる操作であり、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作のために、マネージド関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージド関数を設計できます。結果 1-a: 5 - tid: 22。結果 1-b: 5 - tid: 24。結果 2-a: 9 - tid: 22。https://blog.csdn.net/zhangphil/article/details/130161705

kotlin コルーチン runBlocking は、threads_zhangphil のブログ - CSDN ブログrunBlocking は、時間のかかる操作を行うために内部的に 3 つのコルーチンを開始します。出力から、3 つのコルーチンが同時に実行されることがわかります。RunBlocking は、3 つのコルーチンの実行が完了するまで待機します。終了すると、出力結果には明確な順序が含まれます。runBlocking は同じスコープのコルーチンが完了するまで待機してから終了します。 runBlocking 自体はスレッドをブロックしますが、内部で実行されているコルーチンはブロックされません。runBlocking の後の kotlin の runBlocking コードは、run 内の同じスコープのすべてのコルーチンの後でのみ実行でき、runBlocking はそれが存在するスレッドをブロックします。https://blog.csdn.net/zhangphil/article/details/129263455

おすすめ

転載: blog.csdn.net/zhangphil/article/details/129270875