Kotlin コルーチン CoroutineScope 非同期 async キャンセル 待機タスクのキャンセル

Kotlin コルーチン CoroutineScope 非同期 async キャンセル 待機タスクのキャンセル

 

import kotlinx.coroutines.*

fun main(args: Array<String>) {
    runBlocking {
        val mScope = CoroutineScope(Dispatchers.IO).async {
            println("->")
            delay(999999)
            println("<-")

            "done" //async返回的结果,可以在 mScope.await() 收到。
        }

        CoroutineScope(Dispatchers.IO).launch {
            println("await...")
            val result = mScope.await()
            println(result)
        }

        delay(2000)

        println("cancel...")
        mScope.cancel()
        println("cancel!")
    }

    println("end")
}

 

9e9c172303984bcdbaeec4fef00fd24e.png

 

 

 

 

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 コルーチン coroutineScope_zhangphil のブログ - CSDN ブログcoroutineScope は独立したコルーチン スコープを作成し、開始されたすべてのコルーチンが完了するまで終了しません。runBlocking は coroutineScope に非常に似ており、どちらも、同じスコープのすべての内部コルーチンが終了するまで待ってから、それ自体を終了する必要があります。2 つの主な違いは次のとおりです: runBlocking は現在のスレッドをブロックしますが、coroutineScope はブロックしません。CoroutineScope は、他のコルーチンが使用できるように基礎となるスレッドを一時停止して解放します。kotlin コルーチン coroutineScope。https://blog.csdn.net/zhangphil/article/details/129265638 kotlin coroutine Job、CoroutineScope スコープ、Android_zhangphil のブログ - CSDN ブログの一般的なプログラミング手法、たとえば Android では、メインスレッドの関数に実装されていると仮定します。 , しかし、この関数は時間のかかる操作です。この関数の実装を操作のために非メインスレッドに分割する必要があることは間違いありません。その後、マネージ関数で汚い作業を行うマネージ関数を設計できます。 . 処理が完了したら、結果をメインスレッドにスローします。結果 1-a: 5 - tid:22。一般的なプログラミング手法、たとえば Android では、ある関数がメインスレッドに実装されることを前提としていますが、この関数は時間のかかる操作であるため、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作用のスレッドを使用すると、マネージ関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージ関数を設計できます。https://blog.csdn.net/zhangphil/article/details/131096325 kotlin は CoroutineScope を使用してコルーチンを非同期で開始し、結果が返されるのを待ちます_zhangphil のブログ - CSDN ブログ一般的なプログラミング手法、たとえば Android では、ある関数がメインスレッドに実装されることを前提としていますが、この関数は時間のかかる操作であるため、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作用のスレッドを使用すると、マネージ関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージ関数を設計できます。結果 1-a: 5 - tid:22。一般的なプログラミング手法、たとえば Android では、ある関数がメインスレッドに実装されることを前提としていますが、この関数は時間のかかる操作であるため、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作用のスレッドを使用すると、マネージ関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージ関数を設計できます。https://blog.csdn.net/zhangphil/article/details/129270875 Kotlin コルーチンの同時実行性/並列およびシリアルの切り替え、CoroutineScope および await_kotlin コルーチン Serial_zhangphil のブログ - CSDN ブログrun内部で開始された 3 つのコルーチンのブロック プロセスは時間のかかる操作を実行します。出力では、3 つのコルーチンが相互に並行して実行されていることがわかります。runBlocking は、3 つのコルーチンの実行が完了するまで待機してから終了します。出力結果は明確な順序で表示されます。一般的なプログラミング手法、たとえば Android では、ある関数がメインスレッドに実装されることを前提としていますが、この関数は時間のかかる操作であるため、この関数の実装を非メインスレッドに分割する必要があることは間違いありません。操作用のスレッドを使用すると、マネージ関数内でダーティな作業を実行し、処理が完了した後に結果をメインスレッドにスローするマネージ関数を設計できます。結果 1-a: 5 - tid:22。結果 1-b: 5 - tid:24。結果 2-a: 9 - tid: 22。_kotlin コルーチン シリアルhttps://blog.csdn.net/zhangphil/article/details/130794990

 

おすすめ

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